如何保证整数除法给出正确的结果
How to ensure integer division gives out correct results?
我知道浮点计算很可能是不准确的。例如:
var x = 100*0.333;
这里x被设置为33.300000000000004
而不是33
。这似乎是一个小问题,但如果涉及四舍五入,就会变得很严重。例如,Math.ceil(x)
将是不正确的-将生成34
而不是33
。
问题是我被告知JS在整数和浮点数之间没有太大区别。所以我开始担心是否有办法保证整除法是正确的
JS中通常的整数除法公式似乎是Math.floor(n/m)
,其中n
, m
是整数。现在我们设m
除以n
。由于JS将每个数字视为浮点数,因此n/m
将返回一个浮点数。如果这个浮点数不是精确的,但比实际计算结果小一点点,那么Math.floor(n/m)
将被舍入到比它应该的小一个整数。
举例说明:例如,如果9/3
生成2.999999999999999
而不是3
,那么Math.floor(9/3)
将错误地生成2
而不是3
。嗯,实际上,Math.floor(9/3)
确实给出了正确的结果,但这当然只是一个例子;将9
和3
替换为任意不合适的整数
这种情况会发生吗?如果是这样,有没有办法保证正确的结果?
这种情况会发生吗?
。如果它们是整数(即没有小数部分的浮点数),然后等除,那么结果将是精确的,并且又是整数。
如果不是等除,结果总是大于整数除法的确切结果。你永远不会得到一个应该是3
的2.9999999…
号码。浮点结果与可表示的一样精确,舍入不会破坏总的预购顺序。
如果你想要一个精确的整除法结果。然后按
Math.round((m - m%n)/n)
如果两个数相除的值应该是3,那么它将是。如果该值应该是2.999999999999,那么它将是。Java不做某种奇怪的隐藏四舍五入,向上或向下。如果你总是需要让值向下舍入,那么使用Floor(x/y)即使值是2.99999999999999999999999999999999999,它仍然会返回为2。这就是福斯的工作。细胞也是一样。如果该值为3.0000000000000000000001,则该值将被设置为4。我在大学里教过这个,这就是它应该如何工作的
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JQuery:向多个匹配结果添加换行符的最简单方法
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- webpack代码拆分了handlerbs文件——结果是文件很大
- JavaScript循环无法正确计算/显示结果
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- jQuery使用api获取typeform结果
- 是否保证 document.querySelectorAll(“input[type=checkbox”) 的结果数组的
- 异步.映射保证结果按顺序传递
- 双异步循环,如何保证正确排序顺序的最终结果?(javascript)
- 如何保证整数除法给出正确的结果