使用JQuery解析数字的问题

时间:2019-02-08 19:45:28

标签: javascript jquery

我有一个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);
    });

我知道这个问题尚不清楚,但我需要一些帮助

2 个答案:

答案 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

  1. 您的代码将使用$(value).html()将该值捕获为字符串。 可以,尽管最好将$(value).text()设置为 您不是真的对HTML编码感兴趣,而是对纯文本感兴趣。

  2. 然后代码执行灾难性的替换 .replaceAll(",", ".")。这会将字符串转换为“ 3.578.00” (不好!)。

  3. 最后,代码使用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元素进行输出,而不要从中读取 的值(已格式化)。