【发布时间】:2019-06-11 15:37:01
【问题描述】:
float ff = (float)31.15;
double dd = 31.15;
var frst = Math.Round(ff, 1, MidpointRounding.AwayFromZero);
var drst = Math.Round(dd, 1, MidpointRounding.AwayFromZero);
第一次:31.1
最初:31.2
谁能解释一下原因?
【问题讨论】:
-
因为
(float)31.15
不等于(double)31.15
。浮点算术几乎总是会产生舍入错误。特别是舍入 double 与舍入 float 不同。 -
舍入误差对于浮点值是不可避免的。它们与死亡和税收一样不可避免:youtube.com/watch?v=PZRI1IfStY0
-
@i486 好吧,并非总是如此,
float
的存在是有原因的。 -
@i486 同样,这并不意味着你永远不应该使用
float
。 -
C# 金色徽章在哪里?恕我直言,这应该在前 17 秒内关闭,而不是 5 小时!
标签: c# floating-point double rounding