C# Math.Round (1.785m, 2) 未正确舍入

问题描述 投票:0回答:2

当我尝试将数字

1.785m
舍入为两位数时,遇到一个小问题。该数字可能无法使用十进制数据类型正确表示,因为它仍然是浮点数。

我会排除结果

1.79m
,但它是四舍五入/呈现为
1.78m
。我的问题是,如何才能获得正确的结果?

我当前的解决方法如下所示:

long l = (long)(1.785m * 1000m);
bool roundUp = l % 10 >= 5;

l = l / 10;

if(roundUp)
    l++;

decimal result = l \ 100;
c# math decimal rounding-error
2个回答
1
投票

您需要显式地将 舍入模式 设置为

MidpointRounding.AwayFromZero
,以便 0.5 向上舍入,而不是向下舍入:

using System;

namespace HelloWorld
{
  class Program
  {
    static void Main(string[] args)
    {
      double d = 1.785;
      double r = Math.Round(d, 2, MidpointRounding.AwayFromZero);
      Console.WriteLine(r); // 1.79
    } 
  }
}

0
投票

您必须使用第三个参数根据需要进行舍入(参见Math.Round):

Math.Round(1.785, 2, MidpointRounding.AwayFromZero); // 1.79
© www.soinside.com 2019 - 2024. All rights reserved.