我在页面上有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
答案 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