我在这里用 C# 得到一个非常奇怪的行为:
float num = 144771463f;
// num is 144771456.0
我也试过
float num = Convert.ToSingle(144771463f);
// num is still 144771456.0
为什么会这样?
我在这里用 C# 得到一个非常奇怪的行为:
float num = 144771463f;
// num is 144771456.0
我也试过
float num = Convert.ToSingle(144771463f);
// num is still 144771456.0
为什么会这样?
您在System.Single
类型中遇到了固有的限制(float
是 的名称别名Single
)。
根据 MSDN(http://msdn.microsoft.com/en-us/library/system.single.aspx),该Single
类型有 22 位专用于尾数(也称为有效位),这些位用于存储值中的实际“数字”(其他 10 位存储正/负号和指数)。
22 位意味着您有一个有效范围0
- 4,194,304
- 而您存储的数字是144,771,463
,这是 2 位十进制数字,超出了 . 的(大约)7 位十进制精度Single
。所以它只会存储144,771,46X
(X
不会存储数字的值,但它的大小会存储在指数区域中)。
你有几个选择:
System.Double
提供 51 位尾数System.Decimal
它提供 96 位数字信息,请注意,它Decimal
专门处理数学运算,以牺牲速度为代价保留更多信息(我不知道技术细节,抱歉)。