这里发生了很奇怪的事情:
float theFloat = 10f * 0.5f * 0.0502913967f;
//result is 0.2514569835f
//but a float's precision is only 7digits so it's false.
//I corrected it, rounded at 6digits, result is 0.251457f
float theFloat = (float)Math.Round((decimal)(10f * 0.5f * 0.0502913967f), 6);
没关系,但是当我将它用于另一个浮动时:
Vector2 theVector2 = new Vector2(16302.51f, 0f);
theVector2.X += theFloat;
//means : (16302.51 + 0.251457) = 16302.761457
//but when I check the var the result is : 16302.7607
//so I don't get it...
//also, if theVector2 is 200f more than the previous example (=16502.51f, 0f),
//result is 16502.7617 (200.001f more than previous example's result)
我的错误在哪里?希望你能帮忙。
答案 0 :(得分:2)
除了理解不同的变量存储类型及其精度之外,没有其他真正的错误。我只是回答你的问题,而不是试图粗鲁。
此外,您在一个等式中使用了int
,float
和double
,然后将所有这些转换为decimal
。这是非常糟糕的做法,因为它们都有不同的精度。通常,使用必要的最小存储类型,并使用相同的类型,除非绝对必要,这需要强制转换(隐式或显式)和更改精度。
BlackBear的链接非常好。
另见这些答案:
https://stackoverflow.com/a/618542/1002098
https://stackoverflow.com/a/10056298/1002098
答案 1 :(得分:0)
答案是:在double
中将“数字过多的数字”存储在“{1}}”中,将cast
存储在float
中。