这个问题已经有了答案:
Difference between decimal, float and double in .NET?
16个答案
一些更有经验的人能解释我今天发现的这个奇怪的错误吗?
当我用C脚本加载表数据时,我得到了奇怪的数据量。
事实证明,问题是类似功能的不同输出:

string amount_in_string = "1234567,15";
double amount_in_double = double.Parse(amount_in_string);
float amount_in_float = float.Parse(amount_in_string);

//amount_in_double = 1234567.15;
//amount_in_float = 1234567.13;

为什么当float和double是相似的类型(浮点)时会得到如此不同的结果。像这样的少量,精密度能有区别吗?

最佳答案

当“1234567.15”转换为double时,结果是double中可表示的最接近值,即1234567.14999999068676774584521484375。尽管您在问题中报告值为1234567.15,但实际值为1234567.14999999068676774584521484375。当数值以有限的小数位数显示时,将显示“1234567.15”。
当“1234567.15”转换为float时,结果是float中可表示的壁橱值,即1234567.125。尽管您报告的值为1234567.13,但实际值为1234567.125。当用有限的小数位数显示值时,可能会显示“1234567.13”。
注意,1234567超过1048576,即220。用于float的32位浮点格式使用24位作为有效位(数字的小数部分)。如果有效位的高位表示220,低位表示220−23=2−3=_。这就是为什么您看到“1234567.15”转换为四舍五入到最接近的八分之一的值。

07-27 13:29