我在这里用C#得到了一个非常奇怪的行为:
float num = 144771463f;
// num is 144771456.0
我也试过
float num = Convert.ToSingle(144771463f);
// num is still 144771456.0
为什么会这样?
答案 0 :(得分:7)
您在System.Single
类型中遇到固有限制(float
是Single
的名称别名。
根据MSDN(http://msdn.microsoft.com/en-us/library/system.single.aspx),Single
类型有22位专用于尾数(也称为有效数字),这些是存储实际数字的位数&#39 ;在值中(其他10位存储正/负符号和指数)。
22位表示您的有效范围为0
- 4,194,304
- 而您存储的数字为144,771,463
,超出(近似值)的2位小数Single
的7位十进制精度。因此它只会存储144,771,46X
(X
数字的值不会被存储,但其大小将存储在指数区域中。
您有几个选择:
System.Double
System.Decimal
,请注意Decimal
处理数学运算,特别是以节省成本的方式保存更多信息(我不知道技术细节,遗憾)。