c#division在多个调用中给出奇数结果

时间:2010-12-09 01:13:19

标签: c# division

我们有一个班负责将内部单位转换为显示单位。因此,如果我们的显示单位为m且内部单位为mm,则它将内部单位除以1000的conversionFactor。用户可以以不同的x,y,z坐标将实体添加到系统中。我们有一个奇怪的现象,用户输入1000毫米的单位,所以显示器显示1米。输入始终为1000毫米,但每次1000/1000的划分似乎都在甩开.9999999m而不是1米。所以在我们的网格中我们有1米,1米,1米,1米,0.9999米,1米,1米等。有时.9999m从未出现过有时它是直接有时它发生在20到100输入之后。我们正在调查输入端是否发生了奇怪的事情,但我想知道是否有其他人遇到过这样的事情?

我应该说我们正在将它转换为要显示的字符串。

3 个答案:

答案 0 :(得分:1)

如果您划分的两个数字是浮点值(即double,float,decimal),则可能遇到舍入误差。尝试将它们更改为非浮动类型,并尝试查看是否可以复制问题。

答案 1 :(得分:0)

我猜它是一个显示器......当你将字符串格式化为...小数点后9位时会发生什么?

var str = string.format("{0.000000000}", funkyVal);

我会通过评论问这个,但显然我的水平还不够高;(

答案 2 :(得分:0)

感谢您的帮助,我们通过输入不同的对象将其追踪到一种奇怪的副作用。

问题在于,如果通过3次的任意倍数插入不同的对象,则触发错误,例如objectA在1m输入3次都没关系,然后在1m输入这个objectB后出现0.9999m但是如果objectA输入1,2,4或5次则没有问题。 6次,问题重新出现,9次等等。我们有什么乐趣。