【问题标题】:Casting double to float all the 3 digits after decimal point is lost in C#在C#中丢失小数点后的所有3位浮点数
【发布时间】:2014-12-01 12:36:34
【问题描述】:
        double temp = 136379828.125;
        float m = (float)temp;

我跑了上面的代码,m值为136379824.0 小数点后的所有 3 位数字 '125' 在 double to float 表示中丢失。

【问题讨论】:

  • 你了解单精度和双精度浮点数的区别吗?
  • 不是loss。这是float 代表double
  • 为什么要这样做?如果它没有丢失地工作,我可以拿一个文件,每 6 个字节制作一个双精度(6 以避免丢失,双精度是 8 个字节),然后将它们全部转换为浮点数,并存储它们。新文件的大小是原来的 2/3,据说是无损压缩的。现在一次又一次地应用它.. 假设将 double 转换为 float 应该是无损的,这显然存在问题。
  • 谢谢,我错过了这是因为 32 位可用于表示该点,而我的值位于导致结果的边界上。
  • @Zeeshan 那还是输...

标签: c# floating-point


【解决方案1】:

closest 32 bit floating point value to 136379828.125136379824

换句话说,float 数据类型没有足够的精度来表示您的值。请注意,您的值完全可以用 64 位双精度表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 2022-11-22
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多