c# - C# 中的 float / double Math.Round

标签 c# floating-point double rounding

<分区>

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

drst:31.2

谁能解释一下为什么?

最佳答案

嗯,Math.Round 想要double,而不是float,这就是原因

Math.Round(ff, 1, MidpointRounding.AwayFromZero);

等于

Math.Round((double)ff, 1, MidpointRounding.AwayFromZero);

如果我们检查 (double)ff

Console.Write(((double)ff).ToString("R"));

我们将在行动中看到舍入错误

31.149999618530273

最后,Math.Round(31.149999618530273, 1, MidpointRounding.AwayFromZero) == 31.1 符合预期

关于c# - C# 中的 float / double Math.Round,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54235885/

相关文章:

c# - 使用 SSL 在 C# 中调用 Web 服务 - '(401) Unauthorized'

c# - 保存通用列表

c - sscanf 读取它不应该读取的内容

c# - 如何与 JavaScript 共享 C# 整数变量

c# - 文本框在回发时失去值(value)

math - float 学坏了吗?

c++ - 比较 float 0

JavaScript 似乎做错了 float (与 C 相比)

Android - SharedPreference 转换为 Double

java - 错误 : incomparable types: double and <null>