C# 浮点数加倍
Posted
技术标签:
【中文标题】C# 浮点数加倍【英文标题】:C# Float to Double 【发布时间】:2011-09-20 08:06:43 【问题描述】:static void Main(string[] args)
double y = 23.12F;
Console.WriteLine(y);
Console.Read();
为什么 y 的值显示 23.1200008392334 而不是 23.12
static void Main(string[] args)
int i = -9; uint j = (uint)i;
Console.WriteLine(j);
Console.Read();
j 如何显示值 4294967287
【问题讨论】:
你的第二个例子看起来很奇怪。您正在将负数转换为不支持负数的类型 -9 的two's complement 是:1111 1111 1111 1111 1111 1111 1111 0111。把这个数字带入一个可以将二进制转换为十进制的计算器,你得到 4294967287 ;p 【参考方案1】:浮点数仅保证对于整数值是精确的;除此之外,它们不能代表所有数字;由于 IEEE754 的工作原理,23.1200008392334 是最接近 23.12 的版本。
如果您想要“典型”处理十进制值...请改用decimal
:
decimal y = 23.12M;
使用uint
- 因为uint
没有负值。相反,您从uint
的最大值向后跟踪。如果您不想要这个,请使用checked
:
uint j = checked((uint) i);
或
checked
uint j = (uint)i;
然后它会在一阵火花中爆炸。有时是好事;有时不好。 unchecked
是默认值。
【讨论】:
【参考方案2】:根据 MSDN '这就是 double 的工作原理' http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/1fcf6486-807d-4dce-8aef-7fe5268b568d/
我知道这是 Java,但与 C# 非常相似: Convert float to double without losing precision
【讨论】:
以上是关于C# 浮点数加倍的主要内容,如果未能解决你的问题,请参考以下文章