Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用非标准规则对数字进行四舍五入_C#_.net_Decimal - Fatal编程技术网

C# 使用非标准规则对数字进行四舍五入

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;) 也就是说,您可以创建一个方法,该方法将小数点以及要从中反向取整的最大和最小位数,并在循环中将其向下压缩到所需

考虑以下C#代码:

将产生输出:8.05

Round算法只检查作为参数的小数以外的下一位数字。
我需要一个检查所有小数链的算法。在这种情况下,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转换也会导致一些不直观的舍入行为。也许这就是请求的原因只是不要这样做,否则在例行程序结束时,事情会被释放,孩子们会被吃掉。。。的确但是在万圣节提出这个建议是非常合适的:-)我不应该减少而不是增加吗?