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
答案 0 :(得分:7)
浮点只有保证才能精确到整数值;除此之外,他们不能代表所有数字; 23.1200008392334是最接近23.12的,因为IEEE754 的工作方式。
如果您想要“典型”处理小数值...请改用decimal
:
decimal y = 23.12M;
使用uint
- 因为uint
没有负值。相反,您正在从uint
的最大值向后追踪。如果您不想这样做,请使用checked
:
uint j = checked((uint) i);
或
checked
{
uint j = (uint)i;
}
然后它会在一阵火花中爆炸而不是爆炸。有时是好事;有时候很糟糕unchecked
是默认值。
答案 1 :(得分:1)
根据MSDN的说法,这就是双重工作方式 http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/1fcf6486-807d-4dce-8aef-7fe5268b568d/
我知道这是Java,但与C#非常相似: Convert float to double without losing precision