Javascript中的舍入问题
Rounding issue in Javascript
我在百分比计算和四舍五入结果方面有以下问题。
如果我使用Math.ceil
:
var total = 66666;
var test1 = Math.ceil(60 / 100 * total);
var test2 = Math.ceil(23.5 / 100 * total);
var test3 = Math.ceil(14 / 100 * total);
var test4 = Math.ceil(2.5 / 100 * total);
然后test1 + test2 + test3 + test4 = 66664
如果我使用ParseInt
:
var total = 66666;
var test1 = parseInt(60 / 100 * total);
var test2 = parseInt(23.5 / 100 * total);
var test3 = parseInt(14 / 100 * total);
var test4 = parseInt(2.5 / 100 * total);
然后test1 + test2 + test3 + test4 = 66668
我尝试将我的脚本从Python重写为Javascript,在Python中我没有遇到这样的问题。
如果您阅读文档parseInt
如何工作,则会发布问题所在:
parseInt() 函数解析字符串参数并返回一个 指定基数的整数(数学数字的基数 系统)。
语法
parseInt(string, radix);
字符串
要分析的值。如果字符串不是字符串,则将其转换为 一。字符串中的前导空格将被忽略。
基数
一个介于 2 和 36 之间的整数,表示基数(基数 数学数字系统)的上述字符串。指定 10为人类常用的十进制数字系统。总是 指定此参数以消除读取器混淆并保证 可预测的行为。不同的实现产生不同的 未指定基数时的结果。
描述
parseInt 函数将其第一个参数转换为字符串,解析 ,并返回一个整数或 NaN。
例:
parseInt(2.1) // returns 2
parseInt(2.9) // returns 2 too
parseInt('2.99') // returns 2
还建议在调用时也传递基数作为参数parseInt
。
在javascript中四舍五入最好使用是Math.round()
函数。
参考资料:
Math.Round()
Javascript parseInt()
函数接受字符串作为其参数,而Math.ceil()
接受数字。因此,parseInt
行将解释如下所示的字符串:
parseInt(60 / 100 * total);
// equivalent to: parseInt("39999.6")
在执行此操作时,他们将去除小数点并返回Math.ceil
调用将返回40000
39999
。这就是造成差异的原因。
- 浮点0.2+0.1舍入误差
- 谷歌材料图表:停止工具提示舍入
- jQuery - 带有一些数字的表格计算出现奇怪的舍入错误
- 有人可以详细解释这个 JavaScript 十进制舍入函数吗?
- 求和值时出现Javascript舍入问题
- 在追加文本中舍入数字输出
- Infrastics网络货币编辑舍入问题
- 柔性滑块问题淡入淡出效果
- 是否可以在 JavaScript 中实现没有舍入问题的任意精度算术
- JavaScript 中的舍入问题
- Javascript中的舍入问题
- 在 JavaScript 中向上舍入数字有问题
- JavaScript,数字舍入问题
- 修复CSS流体网格中的子像素舍入问题
- jQuery问题中的舍入数字
- 解析浮点数有舍入限制?我怎样才能解决这个问题
- 淘汰赛中的十进制值舍入问题
- Javascript:需要解决自动舍入的问题
- Javascript浮点问题-舍入问题
- 移动webkit浏览器在JS中有舍入问题吗?