C# 使用非标准规则对数字进行四舍五入
考虑以下C#代码: 将产生输出:8.05 Round算法只检查作为参数的小数以外的下一位数字。C# 使用非标准规则对数字进行四舍五入,c#,.net,decimal,C#,.net,Decimal,考虑以下C#代码: 将产生输出:8.05 Round算法只检查作为参数的小数以外的下一位数字。 我需要一个检查所有小数链的算法。在这种情况下,9应该是第4轮到第5轮,第5轮到第6轮,产生最终结果8.06 更多示例: 8.0545->8.06 8.0544->8.05 有一些内置的方法可以帮助我吗? 谢谢。不;您需要自己编写。我希望如果有一个内置的方法来完成这项工作,它会被报告为bug;) 也就是说,您可以创建一个方法,该方法将小数点以及要从中反向取整的最大和最小位数,并在循环中将其向下压缩到所需
我需要一个检查所有小数链的算法。在这种情况下,9应该是第4轮到第5轮,第5轮到第6轮,产生最终结果8.06 更多示例:
8.0545->8.06
8.0544->8.05 有一些内置的方法可以帮助我吗?
谢谢。不;您需要自己编写。我希望如果有一个内置的方法来完成这项工作,它会被报告为bug;) 也就是说,您可以创建一个方法,该方法将小数点以及要从中反向取整的最大和最小位数,并在循环中将其向下压缩到所需的位置,例如:
private static double NotQuiteRounding(double numToRound, int maxPlaces, int minPlaces)
{
int i = maxPlaces;
do
{
numToRound = Math.Round(numToRound,i);
i = i - 1;
}
while (i >= minPlaces);
return numToRound;
}
Console.WriteLine(NotQuiteRounding(8.0545,10,2));
Console.WriteLine(NotQuiteRounding(8.0544,10,2));
这样称呼它:
private static double NotQuiteRounding(double numToRound, int maxPlaces, int minPlaces)
{
int i = maxPlaces;
do
{
numToRound = Math.Round(numToRound,i);
i = i - 1;
}
while (i >= minPlaces);
return numToRound;
}
Console.WriteLine(NotQuiteRounding(8.0545,10,2));
Console.WriteLine(NotQuiteRounding(8.0544,10,2));
我想你知道你提议的四舍五入在数学上是不正确的吧?也就是说,8.0545比8.06更接近8.05,所以舍入到8.06不是正确的舍入。只是好奇(因为你要找的不是舍入)。。。。为什么?;)是的,我知道这在数学上是不正确的。那是因为我称之为“非标准”。但这仍然是一个四舍五入的过程,不是吗?:)我也不同意这个规则。但这是上级命令。@ZéCarlos:不,这不是真正的四舍五入。舍入是指使用更少的数字得到最接近的数字,实际上是得到一个接近的不同数字,但不是正确的舍入值。顺便说一句,语言中有十进制类型的文字。我建议使用
decimalnumber=8.0549m
而不是将双精度文本转换为十进制。从double转换也会导致一些不直观的舍入行为。也许这就是请求的原因只是不要这样做,否则在例行程序结束时,事情会被释放,孩子们会被吃掉。。。的确但是在万圣节提出这个建议是非常合适的:-)我不应该减少而不是增加吗?