提问人:Jan Wiesemann 提问时间:9/14/2023 更新时间:9/14/2023 访问量:77
C# Math.Round (1.785m, 2) 未正确舍入 [已关闭]
C# Math.Round (1.785m, 2) not rounded correctly [closed]
问:
当我尝试将数字四舍五入到两位数时,我遇到了一个小问题。使用十进制数据类型可能无法正确表示该数字,因为它仍然是一个浮点数。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;
答:
2赞
Mike 'Pomax' Kamermans
9/14/2023
#1
您需要将舍入模式显式设置为:MidpointRounding.AwayFromZero
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
double d, r;
d = 1.785;
r = Math.Round(d, 2, MidpointRounding.AwayFromZero);
Console.WriteLine(r); // 1.79
d = -1.785;
r = Math.Round(d, 2, MidpointRounding.AwayFromZero);
Console.WriteLine(r); // -1.79, not -1.78
}
}
}
但根据这些代码注释:这与负数的罐子上所说的完全一样,负数将向下舍入而不是向上。如果需要 0.5 始终向上舍入,则需要 ,但根据您的 .NET 版本,可能不支持该枚举。Math.ToPositiveInfinity
0赞
thibsc
9/14/2023
#2
您必须使用第三个参数来根据需要进行舍入(参见 Math.Round):
Math.Round(1.785, 2, MidpointRounding.AwayFromZero); // 1.79
评论
Math.Round(1.785m, 2, MidpointRounding.AwayFromZero)