Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c除法在多次调用时给出奇数结果_C#_Division - Fatal编程技术网

C# c除法在多次调用时给出奇数结果

C# c除法在多次调用时给出奇数结果,c#,division,C#,Division,我们有一个类负责将内部单位转换为显示单位。因此,如果我们的显示单位是m,内部单位是mm,它将内部单位除以1000的转换因子。用户可以在不同的x、y、z坐标向系统中添加实体。我们有一个奇怪的例子,用户输入的单位是1000毫米,所以显示器显示为1米。输入值始终为1000毫米,但1000/1000的除法似乎每隔一段时间就会增加0.9999999米,而不是1米。因此,在我们的网格中,我们有1米,1米,1米,1米,0.9999米,1米,1米等。有时.9999米不会出现,有时是直接出现,有时是在20到100

我们有一个类负责将内部单位转换为显示单位。因此,如果我们的显示单位是m,内部单位是mm,它将内部单位除以1000的转换因子。用户可以在不同的x、y、z坐标向系统中添加实体。我们有一个奇怪的例子,用户输入的单位是1000毫米,所以显示器显示为1米。输入值始终为1000毫米,但1000/1000的除法似乎每隔一段时间就会增加0.9999999米,而不是1米。因此,在我们的网格中,我们有1米,1米,1米,1米,0.9999米,1米,1米等。有时.9999米不会出现,有时是直接出现,有时是在20到100次输入后出现。我们正在调查输入端是否发生了异常情况,但我想知道是否有其他人遇到过类似的情况


我应该说我们正在把它转换成一个字符串来显示。

我猜这是一个显示的东西。。。将字符串格式化为。。。小数点后9位

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

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

如果要除法的两个数字是浮点值(即双精度、浮点、十进制)您可能遇到舍入错误。如果可能,请尝试将其更改为非浮点类型,并尝试查看是否可以复制此问题。

感谢您的帮助,我们已将其跟踪到输入不同对象的奇怪副作用


问题是,如果一个不同的对象被插入3次的任意倍数,则会触发错误,例如objectA在1m处被输入3次,好的,然后在该objectB在1m处被输入后,会出现0.9999 m。但是,如果objectA被输入1、2、4或5次,则没有问题。6次,问题再次出现,9次等等。我们有多有趣。

让我们继续吧编辑:Ninja’这些问题可能是由于使用了
float
double
造成的。您是否考虑过使用
decimal
或精确数字类?我怀疑您的
1000
中有一个实际上类似于
1000.0000000000000000 1
。请检查数字的精确表示形式(a*2^b)。有疑问。这不是随机的,在我的机器上,超过1000000次这样的操作都会导致1。当然,这看起来确实像是舍入错误,但可能是代码中的其他地方。