我有以下JavaScript语法:
var discount = Math.round(100 - (price / listprice) * 100);
这是整数。我如何返回两个小数点后的结果?
我有以下JavaScript语法:
var discount = Math.round(100 - (price / listprice) * 100);
这是整数。我如何返回两个小数点后的结果?
当前回答
对公认答案的一个小变化。 toFixed(2)返回一个字符串,你将总是得到两个小数点后的位置。这些可能是零。如果你想压制最后的0 (s),简单地这样做:
var discount = + ((price / listprice).toFixed(2));
编辑: 我刚刚在Firefox 35.0.1中发现了一个错误,这意味着上面可能会给NaN一些值。 我把代码改成了
var discount = Math.round(price / listprice * 100) / 100;
这给出了一个小数点后最多两位的数字。如果你想要3个,你可以乘除1000,以此类推。 OP总是需要两个小数点后的位置,但是如果toFixed()在Firefox中被破坏了,它首先需要修复。 参见https://bugzilla.mozilla.org/show_bug.cgi?id=1134388
其他回答
如果使用一元加号将字符串转换为MDN上记录的数字。
例如:+ discount.toFixed (2)
下面是一个工作示例
var value=200.2365455;
result=Math.round(value*100)/100 //result will be 200.24
要得到两个小数的结果,你可以这样做:
var discount = Math.round((100 - (price / listprice) * 100) * 100) / 100;
要四舍五入的值乘以100以保留前两位数字,然后除以100以得到实际结果。
函数Math.round()和. tofixed()意味着舍入到最接近的整数。在处理小数和使用Math.round()的“乘除”方法或使用. tofixed()的参数时,会得到不正确的结果。例如,如果您尝试使用Math.round(1.005 * 100) / 100对1.005进行舍入,那么您将得到1的结果,而1.00将使用. tofixed(2)而不是得到1.01的正确答案。
您可以使用以下方法来解决此问题:
Number(Math.round(100 - (price / listprice) * 100 + 'e2') + 'e-2');
加上. tofixed(2)得到你想要的小数点后两位。
Number(Math.round(100 - (price / listprice) * 100 + 'e2') + 'e-2').toFixed(2);
你可以创建一个函数来为你处理舍入:
function round(value, decimals) {
return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
}
例子: https://jsfiddle.net/k5tpq3pd/36/
替代
您可以使用prototype向Number添加圆形函数。我不建议在这里添加. tofixed(),因为它将返回一个字符串而不是数字。
Number.prototype.round = function(decimals) {
return Number((Math.round(this + "e" + decimals) + "e-" + decimals));
}
像这样使用它:
var numberToRound = 100 - (price / listprice) * 100;
numberToRound.round(2);
numberToRound.round(2).toFixed(2); //Converts it to string with two decimals
例子 https://jsfiddle.net/k5tpq3pd/35/
来源:http://www.jacklmoore.com/notes/rounding-in-javascript/
我认为我见过最好的方法是乘以10的位数次方,然后做个数学。四舍五入,最后除以10的数字次方。下面是我在typescript中使用的一个简单函数:
function roundToXDigits(value: number, digits: number) {
value = value * Math.pow(10, digits);
value = Math.round(value);
value = value / Math.pow(10, digits);
return value;
}
或者纯javascript:
function roundToXDigits(value, digits) {
if(!digits){
digits = 2;
}
value = value * Math.pow(10, digits);
value = Math.round(value);
value = value / Math.pow(10, digits);
return value;
}