Mat*_*Kri 4 c# visual-studio-2012 floating-point-conversion
我在这里用C#得到了一个非常奇怪的行为:
float num = 144771463f;
// num is 144771456.0
Run Code Online (Sandbox Code Playgroud)
我也试过了
float num = Convert.ToSingle(144771463f);
// num is still 144771456.0
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
你在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,超过(近似)7位十进制精度的2位小数Single.因此它只会存储144,771,46X(X数字的值不会被存储,但其大小将存储在指数区域中).
你有几个选择:
System.Double提供51位尾数的用法System.Decimal提供96位数字信息的用法,请注意,Decimal处理数学运算特别是以节省成本的方式保存更多信息(我不知道技术细节,对不起).| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |