我需要创建一个图表,其中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,所以我无法理解所说的内容。
干杯
答案 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;