【问题标题】:Why my precision getting loss while converting double to float in c#?为什么在 c# 中将 double 转换为 float 时我的精度会丢失?
【发布时间】:2020-06-08 05:54:24
【问题描述】:

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

double value = 10293.01416015625;
float converted = (float)value;

预期值 - 10293.0141

价值得到提升 - 10293.0137

提前致谢

【问题讨论】:

    标签: c# floating-point double precision


    【解决方案1】:

    来自System.Single documentation

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

    您的结果正确到 7 位有效数字 (10293.01)。您不应该期望通过float 获得更多。

    最接近 10293.01416015625 的 floats 的确切值是 10293.013671875 和 10293.0146484375。两者都与您尝试表示的值相差 0.00048828125。

    【讨论】:

    • 感谢您的回答。如果在 10293.014160156252 等值的末尾添加 2,则得到正确的值。这会是什么原因?
    • @VenkyDhana:根据我的编辑,您请求的值恰好是两个 float 值之间的一半。您的更改将其推向更高的更改,在这种情况下 恰好 是您期望的答案。但从根本上说,如果您需要超过 7 个十进制数字的精度,则根本不应该使用 float
    猜你喜欢
    • 2010-10-29
    • 2019-06-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多