【发布时间】: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