当我尝试将数字
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;
您需要显式地将 舍入模式 设置为
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
}
}
}
您必须使用第三个参数根据需要进行舍入(参见Math.Round):
Math.Round(1.785, 2, MidpointRounding.AwayFromZero); // 1.79