【发布时间】:2025-12-29 18:35:17
【问题描述】:
我正在使用 .Net Web API 返回具有双精度的信息。在我返回之前,我将这些双精度数四舍五入到小数点后两位。当我打印它们时,我得到(f.e):145,92。都很棒。但是当我返回那个双精度时,我的 JSON 响应是用这样的双精度创建的:
“小时”:145.92000000000002
任何想法是什么造成了这个问题?
我的舍入函数是:
public double ApplyRounding(double value, int digits)
{
decimal decValue = (decimal)value;
// First round is to fix rounding errors by changing things like 0.99499999999999 to 0.995
decValue = Math.Round(decValue, digits + 5, MidpointRounding.AwayFromZero);
decValue = Math.Round(decValue, digits, MidpointRounding.AwayFromZero);
return (double)decValue;
}
谢谢
【问题讨论】:
-
这就是 C# 解释
double的方式。关于小数,double的浮点精度与float不同。使用float更精确地表示您的十进制数。 -
@AlexBarac 你的意思是
decimal而不是float? -
@oleksii 不...我曾经在一个伪随机生成器程序上工作,由于
double操作的舍入问题,该程序在double上表现不佳,而在float上表现出色创建,这似乎是 OP 遇到的问题
标签: c# .net json double rounding