我有一个Javascript文件,该文件计算并解析称为作业的crm模块中的行。
我有一个叫做recalculateSummary的函数,它可以像这样计算价格 I want it to show 3,578.00 in total like Line Total
问题出在函数parseFloat
上,我认为它忽略了',',因为我要写入3,578.00,因此总数应为3,578.00。
我可以通过删除parseFloat函数和删除ReplaceAll函数来实现这一点,但是当我添加更多行时,总值变为0.00时出现错误。
recalculateSummary: function(){
var subtotal = 0;
$.each($('.row_line_total'), function(index,value){
lineTotal = $(value).html().replaceAll(',','.').replaceAll(' ','');
subtotal += parseFloat(lineTotal);
});
我知道这个问题尚不清楚,但我需要一些帮助
答案 0 :(得分:0)
是否要为计算结果添加toFixed(2)
?
我的意思是:
$('.summary_subtotal').html($.number(subtotal,2));
->
$('.summary_subtotal').html($.number(subtotal.toFixed(2),2));
答案 1 :(得分:0)
原因是parseFloat
将逗号替换为点,将其解释为小数点分隔符,因此您的数字突然减少了1000倍。
例如3,578.00
您的代码将使用$(value).html()
将该值捕获为字符串。
可以,尽管最好将$(value).text()
设置为
您不是真的对HTML编码感兴趣,而是对纯文本感兴趣。
然后代码执行灾难性的替换
.replaceAll(",", ".")
。这会将字符串转换为“ 3.578.00”
(不好!)。
最后,代码使用parseFloat
将此字符串转换为数字。
第一个点被解释为小数点分隔符,而不是千位分隔符
分隔符(原来是)。第二个点不能是
解释为数字的一部分,因此parseFloat
返回一个
值3.578的数字。您可能还有其他一些机制
仅显示2个十进制数字的位置,因此该值最终出现在
页为3.58(四舍五入)。
为了解决此问题,请替换为:
lineTotal = $(value).html().replaceAll(',','.').replaceAll(' ','');
具有:
lineTotal = $(value).text().replace(/[^.\d]/g, '');
在这里,我们使用正则表达式.
删除不是点(\d
)也不是数字([^.\d]
)的所有内容。因此,现在示例值将变为“ 3578.00”(删除了千位分隔符)。 parseFloat
会将字符串转换为数字3578。您的渲染机制可能会使用两个小数和一个千位分隔符3,578.00来渲染它。
总而言之,最好是根据数字变量编写逻辑,只使用DOM元素进行输出,而不要从中读取 的值(已格式化)。