我提前道歉。我通读了很多帖子,我确信答案在于实现 toFixed()
方法,但不知道如何实现。
$('.addsurcharge').click(function() {
$('span.depositamount').text(function(i,v) {
return Math.round(parseInt(v * 100, 10) * 0.025) / 100 + (v * 1);
});
});
$('.nosurcharge').click(function() {
$('span.depositamount').text(function(i,v) {
return Math.round(parseInt(v * 100, 10) * -0.025) / 100 + (v * 1);
});
});
基本上,上面是对 AMEX 存款增加(或减少)2.5% 的附加费,我希望它四舍五入到最接近的两位小数。最好以 0.05 增量。
感谢帮助!
最佳答案
货币最简单的方法是以小单位计算,然后四舍五入,最后才转换为大单位。所以对于一个有美元和美分的系统,直到最后都以美分计算,然后转换为美元。如果要输入的文本的格式为“2.03”,则它可以使用类似以下内容将其四舍五入到最接近的 $0.05:
function roundToFiveCents(v) {
// Turn dollars into cents and convert to number
var len;
v = v * 100;
// Get residual cents
var r = v % 5;
// Round to 5c
if (r) {
v -= (r == 1 || r == 2)? r : r-5;
}
// Convert to string
v = v + '';
len = v.length - 2;
// Return formatted string
return v.substring(0, len) + '.' + v.substring(len);
}
那可以更简洁,但我看不出重点,它只会混淆。字符串操作非常快,用简单的加减法代替了 javascript 小数乘法和除法的不确定性。
例如借用 rfausak 的回答:
// Returns string, remove ' + ''' to return number
function roundToFiveCents(v) {
return (Math.round(v*20)/20).toFixed(2) + '';
}
关于javascript 数学,以 .05 为增量四舍五入到小数点后两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7510107/