修剪尾随零不太正常

时间:2014-07-18 10:55:06

标签: javascript

我在页面上有4个小数位的价格。有些产品的价格小数点后4位,但有些只有2位。

目前我们的网站设置为每个产品以小数点后4位显示,我必须使用javascript来降低那些不是小数点后两位的产品的价格。

所以我有这样的价格......

£0.1234

£1.1000

£10.9900

£100.0000

我有以下javascript适用于小数点后数字大于1的价格,但在小数点后只有0的价格上失败...

$.each($("#mydiv"),function(){
  var price = $(this).text().replace("£","");
  var number = parseFloat(price);
  var integerPart = number.toString().split(".")[0] == 0 ? 0: number.toString().split(".")[0].length;
  var decimalPart = number.toString().split(".")[1].length;
  if(decimalPart > 2){
    $(this).text("£" + number.toPrecision(integerPart + decimalPart));
  }else{
    $(this).text("£" + number.toPrecision(integerPart + 2));
  }
});

它失败的价格是100.00英镑 - 我希望价格如下:没有四舍五入...

£0.1234

£1.10

£10.99

£100.00

2 个答案:

答案 0 :(得分:1)

如果前面的字符是十进制句点后跟另外两位数,只需使用正则表达式删除任何尾随零:

$('.myClass').text(function(_, t) {
    return t.replace(/(\.\d\d)00$/, '$1');
});

注意:您无法使用重复的元素ID,因此$.each调用 应该没有实际意义。如果确实有多个字段需要这样做,请用类标记它们,而不是ID。上面代码中的.text调用将自动处理多个元素。

编辑,如果你真的无法升级你的jQuery:

$('.myClass').each(function() {
    var $this = $(this);
    var text = $this.text();
    text = text.replace(/(\.\d\d)00$/, '$1');
    $this.text(text);
});

答案 1 :(得分:0)

除了Alnitak的答案之外,我强烈建议将商店商品的价格存储为整数(或者可能在您的情况下为多头),这样您就不必担心双重或浮动的不精确。

因为你有4位小数,整数(或长)不能代表便士,而是1/100便士。

示例:

Price on website   |    price in database
-------------------------------------------
£0.1234            |     1234
£1.10              |    11000
£10.99             |   109900
£100.00            |  1000000