1

我正在编写有员工薪水的 C# 应用程序。如何获得像 26500 这样的工资整数的上限和下限在 20000 和 30000 之间。我想找到 26500 的这两个值的上限和下限。像这样,如果工资值是 1200,那么它的上限和下限将是 1000 和 2000。

4

3 回答 3

3

您可以使用类似以下代码的内容:

        private void button1_Click(object sender, EventArgs e)
        {
            int a = 26500;
            int powerOfTen = (int)Math.Pow(10, NumDigits(a)-1);
            int lowerBound = a - a%powerOfTen;
            int upperBound = (a/powerOfTen + 1) * powerOfTen;
        }
        private int NumDigits(int value)
        {
            int count = 0;
            while (value > 0)
            {
                value /= 10;
                count++;
            }
            return count;
        }

顾名思义,方法 NumDigits 将计算所需数字的位数。

于 2013-04-30T17:00:21.417 回答
1
int value = 26500; // Initialise this to whatever value you need.
int range = (int)(0.5 + Math.Pow(10, (int)Math.Log10(value)));
int lower = range*(value/range);
int upper = lower + range;

这通过以下方式起作用:

  1. 使用 (int)Math.Log10() 计算出该值的最接近 10 的幂。
  2. 将其与 Math.Pow() 和四舍五入一起使用以给出一个 10 的幂的整数。
  3. 将低于 10 次方的数字除以它,然后将结果的整数部分乘以它,
  4. 上限将只是下限加上 10 的幂。

请注意,value整数是至关重要的。

于 2013-04-30T16:54:09.890 回答
0

我无法抗拒......一种不同的基于“字符串”的方法,我相信很多人会讨厌

int value = 26500;
int lower = Convert.ToInt32(value.ToString().Substring(0, 1) + new String('0', value.ToString().Length - 1));
int upper = lower + Convert.ToInt32("1" + new String('0', value.ToString().Length - 1));

Console.WriteLine(lower.ToString("N0") + " <=  " + value.ToString("N0") + " <= " + upper.ToString("N0"));

奖励:它不会在 0(零)时呕吐......

于 2013-04-30T20:25:59.183 回答