我正在编写有员工薪水的 C# 应用程序。如何获得像 26500 这样的工资整数的上限和下限在 20000 和 30000 之间。我想找到 26500 的这两个值的上限和下限。像这样,如果工资值是 1200,那么它的上限和下限将是 1000 和 2000。
问问题
1356 次
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;
这通过以下方式起作用:
- 使用 (int)Math.Log10() 计算出该值的最接近 10 的幂。
- 将其与 Math.Pow() 和四舍五入一起使用以给出一个 10 的幂的整数。
- 将低于 10 次方的数字除以它,然后将结果的整数部分乘以它,
- 上限将只是下限加上 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 回答