visual studio 2012 -使用VS2012在c#上进行糟糕的浮点转换
本文关键字:转换 2012 studio 使用 VS2012 visual | 更新日期: 2023-09-27 18:01:39
我在这里得到一个非常奇怪的行为与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
,这是Single
的(近似)7位十进制精度之外的2位十进制数字。因此,它将只存储144,771,46X
(X
的值不会被存储,但其幅度将被存储在指数区)。
你有几个选择:
- 使用
System.Double
,它提供51位尾数 - 使用
System.Decimal
,它提供了96位的数字信息,注意Decimal
处理数学运算的方式以速度为代价保留了更多的信息(我不知道技术细节,抱歉)。