将数字舍入到下一个最高10

时间:2011-12-30 13:02:24

标签: c# numbers rounding

我需要创建一个图表,其中Y轴的比例根据输入系统的数据而变化。可以想象,这个比例可以是0-10,0-100,甚至有数千的下限和数百万的上限。

要正确确定此轴的比例,我需要计算出点到像素的比例(基于图形高度/范围)。 现在图形的轴永远不会从最低值开始并且到达最高值,通常的做法是转到下一个最近的2,5或10(上限为上限,下方为下限),具体取决于值的范围。 / p>

所以我想知道的是如何从数据集中获取最大值,并将其四舍五入到最接近的10。 为了澄清,输入值将始终为整数。

我现在拥有的是这个

        if ((rangeMax < 10) && (rangeMax > 5))
            rangeMax = 10;
        else if (rangeMax < 5)
            rangeMax = 5;

仅对小于10的值有用,并且不允许真正动态所需的灵活性。最终,此图表将在页面加载事件期间自动生成,无需用户输入。

我已经阅读了一下,人们谈论模数运算符(%)之类的东西,但我找不到任何有关它的使用的可靠信息,并谈论Math.Ceiling和Math.Round,但这些转到下一个最接近的整数,这个数字并不完全存在,并且在处理整数时似乎没有多少帮助。 任何建议,指示或帮助都非常感激。

我确实在这里找到了一个类似的问题How can i get the next highest multiple of 5 or 10,但我不知道java,所以我无法理解所说的内容。

干杯

5 个答案:

答案 0 :(得分:21)

if(rangeMax % 10 !=0)
   rangeMax = (rangeMax - rangeMax % 10) + 10;

你也可以使用Math.Round()MidpointRounding.AwayFromZero使用十进制数字(否则整数除法会截断分数):

decimal number = 55M;
decimal nextHighest = Math.Round(number/ 10, MidpointRounding.AwayFromZero) * 10;

答案 1 :(得分:3)

如果你想进入下一个10,你可以使用Math.Ceiling,如下所示:

rangeMax = (int)(Math.Ceiling((decimal)rangeMax / 10) * 10);

如果您需要概括以转到下一个n(例如此处为5),您可以执行以下操作:

int n = 5;    
rangeMax = (int)(Math.Ceiling((decimal)rangeMax / n) * n);

答案 2 :(得分:2)

可能有帮助的是将数字除以10.这应该将它四舍五入到最接近的整数。然后再将它乘以10以使数字四舍五入到最接近的10

答案 3 :(得分:2)

我用这个:

public static double RoundTo10(double number)
        {
            if (number > 0)
            {
                return Math.Ceiling(number / 10) * 10;
            }
            else
            {
                return Math.Floor(number / 10) * 10;
            }
        }

答案 4 :(得分:0)

你可以试试这个......

            decimal val = 95;
        //decimal val =Convert.ToDecimal( textBox1.Text);
        decimal tmp = 0;
        tmp = (val % 10);
        //MessageBox.Show(tmp.ToString()+ "Final val:"+(val-tmp).ToString());
        decimal finval = val - tmp;