C#浮动到双精度
为什么y的值显示为23.1200008392334而不是23.12C#浮动到双精度,c#,floating-point,double,C#,Floating Point,Double,为什么y的值显示为23.1200008392334而不是23.12 static void Main(string[] args) { double y = 23.12F; Console.WriteLine(y); Console.Read(); } 根据MSDN“这就是double的工作原理”,j如何显示值4294967287 我知道这是Java,但与C非常相似: 根据MSDN,“这就是double的工作原理” 我知道这
static void Main(string[] args)
{
double y = 23.12F;
Console.WriteLine(y);
Console.Read();
}
根据MSDN“这就是double的工作原理”,j如何显示值4294967287 我知道这是Java,但与C非常相似:
根据MSDN,“这就是double的工作原理” 我知道这是Java,但与C非常相似: 浮点仅保证整数值的精确性;除此之外,它们不能代表所有的数字;由于IEEE754的工作原理,23.1200008392334最接近23.12 如果你想“典型”处理十进制值。。。改用
decimal
:
static void Main(string[] args)
{
int i = -9; uint j = (uint)i;
Console.WriteLine(j);
Console.Read();
}
使用uint
-因为uint
没有负值。而是从uint
的最大值向后跟踪。如果您不想这样做,请使用checked
:
decimal y = 23.12M;
或
然后,它会在一阵火花中爆炸。有时是件好事;有时很糟糕<默认情况下,代码>未选中。浮点仅保证整数值的精确性;除此之外,它们不能代表所有的数字;由于IEEE754的工作原理,23.1200008392334最接近23.12
如果你想“典型”处理十进制值。。。改用decimal
:
static void Main(string[] args)
{
int i = -9; uint j = (uint)i;
Console.WriteLine(j);
Console.Read();
}
使用uint
-因为uint
没有负值。而是从uint
的最大值向后跟踪。如果您不想这样做,请使用checked
:
decimal y = 23.12M;
或
然后,它会在一阵火花中爆炸。有时是件好事;有时很糟糕<代码>未选中是默认值。您的第二个示例似乎很奇怪。您正在转换不支持负数的类型中的负数,-9的值为:1111111111111111111111111111111111111111111111011。把这个数字输入一个计算器,可以将二进制转换成十进制,得到4294967287;我们的第二个例子似乎很奇怪。您正在转换不支持负数的类型中的负数,-9的值为:1111111111111111111111111111111111111111111111011。把这个数字输入一个计算器,可以将二进制转换成十进制,得到4294967287;P