为什么在 C# PointF 中浮点运算 return 整数?
Why float operation return integer numbers in C# PointF?
我有以下使用所有平面数据类型的语句。
ScaledCordinates.BottomRight = new PointF(((float)ScaleBottomRight.X * (float)Scale), ((float)ScaleBottomRight.Y * (float)Scale));
分配给 "ScaleBottomRight.X" is 2.36523485
和 "ScaleBottomRight.Y" is 2.38020468
的值。
"Scale" = 66.80098
.
我不明白为什么 "ScaledCordinates.BottomRight"
在我的应用程序中给我 {X = 158 Y = 159}
。
为什么float运算是returns整数值?有时输出是整数,有时是浮点数,这甚至令人沮丧。我在 double 和 float 之间进行了各种转换,但结果相同。解决这些问题的最佳方法是什么?输出应为“浮点”数据类型。
2.36523485 * 66.80098 = 158.000005910153
和
2.38020468 * 66.80098 = 159.0000052245864
它们的小数部分都太小,无法适应浮点精度,根据 the docs,浮点精度约为 6-9 位。虽然乘法的结果仍然是float
(即System.Single
):
Console.WriteLine((2.36523485f * 66.80098f)); // prints "158"
Console.WriteLine((2.36523485f * 66.80098f).GetType()) // prints "System.Single"
我假设无论类型 ScaledCordinates.BottomRight
是什么,它的 X
和 Y
属性(字段的)都是类型 int
.
例如,它可能是类型 Point, whose X and Y are int
s: X docs. Y docs。
您可以将其更改为其他类型。但只要它们是 int
s - 你就不能保留浮点信息。
我有以下使用所有平面数据类型的语句。
ScaledCordinates.BottomRight = new PointF(((float)ScaleBottomRight.X * (float)Scale), ((float)ScaleBottomRight.Y * (float)Scale));
分配给 "ScaleBottomRight.X" is 2.36523485
和 "ScaleBottomRight.Y" is 2.38020468
的值。
"Scale" = 66.80098
.
我不明白为什么 "ScaledCordinates.BottomRight"
在我的应用程序中给我 {X = 158 Y = 159}
。
为什么float运算是returns整数值?有时输出是整数,有时是浮点数,这甚至令人沮丧。我在 double 和 float 之间进行了各种转换,但结果相同。解决这些问题的最佳方法是什么?输出应为“浮点”数据类型。
2.36523485 * 66.80098 = 158.000005910153
和
2.38020468 * 66.80098 = 159.0000052245864
它们的小数部分都太小,无法适应浮点精度,根据 the docs,浮点精度约为 6-9 位。虽然乘法的结果仍然是float
(即System.Single
):
Console.WriteLine((2.36523485f * 66.80098f)); // prints "158"
Console.WriteLine((2.36523485f * 66.80098f).GetType()) // prints "System.Single"
我假设无论类型 ScaledCordinates.BottomRight
是什么,它的 X
和 Y
属性(字段的)都是类型 int
.
例如,它可能是类型 Point, whose X and Y are int
s: X docs. Y docs。
您可以将其更改为其他类型。但只要它们是 int
s - 你就不能保留浮点信息。