我在文本框上的更改事件上有以下Jquery函数
$('input:text[id$=txtText1]').change(GetTotal);
这会调用GetTotal函数
function GetTotal() {
var value1 = txtText1.val();
var value2 = txtText2.val();
var sum = add(value1, value2)
$('input:text[id$=txtSubTotals]').val(sum);
}
这是添加功能
function add() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
if (IsNumeric(arguments[i])) {
sum += parseFloat(arguments[i]);
}
}
return sum;
}
在文本框1中,值为1.45,在文本框2中,它为1.44而不是2.89。我得到以下值2.8899999999999997
答案 0 :(得分:4)
欢迎来到浮点数学的世界(在互联网上有很多关于此的文章,但这是javascript和其他语言中浮点数学类型的工作原理)。您可以在许多文章中阅读浮点问题。这是one。问题在于,某些正常的十进制值无法以浮点格式精确表示,因此您可能会得到预期的微小错误。
一般情况下,如果您在原始数字中没有使用大量小数点,那么将您的值四舍五入到较小的小数点将消除差异。
例如,如果你想确保得到2.89,那么你可以将你的值四舍五入到一定数量的小数点,你就会得到想要的答案。
您可能希望更改将其放入总字段的方式,如下所示:
$('input:text[id$=txtSubTotals]').val(sum.toFixed(2));
或者,您甚至可以像6
一样使用sum.toFixed(6)
之类的值,它仍然可以解决您的问题。
如果你真的想要完美的精确度(比如非常重要的财务计算),那么有些库不会使用浮点数进行准确的金融数学运算,或者你可以实际转换为整数分数并完成所有的数学运算美分,只将小数点放回最后。
答案 1 :(得分:1)
您可以使用JavaScript toFixed()
方法。