为什么我的精度在 c# 中将 double 转换为 float 时会丢失?

Ven*_*ana 2 c# floating-point precision double

我在 c# 中有双倍值10293.01416015625,我正在尝试转换为浮点数。由于 float 只有 24 位,我想得到的结果为10293.0141。但我得到的价值为10293.0137

double value = 10293.01416015625;
float converted = (float)value;
Run Code Online (Sandbox Code Playgroud)

预期值- 10293.0141

我得到的价值- 10293.0137

提前致谢

Jon*_*eet 8

System.Single 文档

单个值具有最多 7 位十进制数字的精度,但内部最多保留 9 位数字。

您的结果最多 7 位有效数字 (10293.01) 是正确的。您不应期望使用float.

float最接近 10293.01416015625的s的确切值是 10293.013671875 和 10293.0146484375。两者都与您要表示的值相差 0.00048828125。

  • @VenkyDhana:根据我的编辑,您请求的值恰好是两个“float”值之间的一半。您的更改将其推向更高的答案,在这种情况下*恰好*是您期望的答案。但从根本上来说,如果您需要超过 7 位小数位的精度,则不应该使用“float”。 (5认同)