C# 除法在多次调用时给出奇怪的结果

发布于 2024-10-06 17:32:51 字数 366 浏览 4 评论 0原文

我们有一个类负责将内部单位转换为显示单位。因此,如果我们的显示单位为 m,内部单位为 mm,则内部单位除以 conversionFactor 1000。用户可以在不同的 x、y、z 坐标处将实体添加到系统中。我们遇到了一个奇怪的情况,用户输入 1000 mm 的单位,因此显示屏显示 1m。输入始终为 1000 mm,但时不时地,1000/1000 的除法似乎会抛出 0.9999999m,而不是 1m。所以在我们的网格中,我们有 1m,1m,1m,1m,0.9999m,1m,1m 等。有时 0.9999m 永远不会出现,有时会立即出现,有时会在 20 到 100 个输入后出现。我们正在调查输入端是否发生了奇怪的情况,但我想知道其他人是否遇到过类似的情况?

我应该说我们正在将其转换为字符串来显示。

We have an class responsible for converting internal units to display units. So if our display units are m and internal units are mm it would divide the internal units by a conversionFactor of 1000. The user can add entities into the system at a varying x,y,z co-ordinates. We have an odd occurrence where a user is inputting units at 1000 mm so the display is showing 1m. the input is consistently 1000 mm but every now and again the division of 1000/1000 seems to be throwing up .9999999m instead of 1m. so in our grid we have 1m,1m,1m,1m,0.9999m,1m,1m etc. Sometimes the .9999m never appears some times it is straight away sometimes it is occurs after 20 to 100 inputs. We are investigating if something odd is happening on the input side, but I wondered if anyone else has come across something like this?

I should say we are converting it to a string to display.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

天煞孤星 2024-10-13 17:32:51

如果您要除的两个数字是浮点值(即双精度型、浮点型、小数型),则可能会遇到舍入错误。如果可能的话,尝试将它们更改为非浮动类型,并尝试看看是否可以复制该问题。

If the two numbers you're dividing are floating-point values (i.e. double, float, decimal) than you may be experiencing a rounding error. Try changing them to non-floating types if possible and try to see if you can replicate the problem.

年少掌心 2024-10-13 17:32:51

我猜这是一个显示问题...当您将字符串格式化为... 9 位小数时会发生什么?

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

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

I'm guessing it's a display thing... what happens when you format the string to say... 9 decimal places?

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

I'd ask this via comment, but apparently I'm not a high enough level ;(

烂人 2024-10-13 17:32:51

感谢您的帮助,我们已经将其追溯到输入不同对象时产生的奇怪副作用。

问题是,如果插入不同的对象 3 次的任意倍数,则会触发错误,例如 objectA 在 1m 输入 3 次都可以,然后在 1m 输入此 objectB 后,会出现 0.9999m,但是如果 objectA 输入 1,2 ,4、5次就没有问题了。 6 次问题又出现,9 次等等。我们玩得很开心。

Thanks for all your help we have tracked it down to a weird side effect from inputing a different object.

The issue is that if a different object is inserted by any multiple of 3 times the error is triggered e.g. objectA is input 3 times at 1m all okay, then after this objectB is input at 1m 0.9999m appears however if objectA is input 1,2,4 or 5 times there is no problem. 6 times and the problem reappears, 9 times etc. What fun we have.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文