在JavaScript中使用正好两位小数格式化数字
本站寻求有缘人接手,详细了解请联系站长QQ1493399855
我有这行代码将我的数字四舍五入到小数点后两位。 但是我得到这样的数字:10.8、2.4等。这些不是我对小数点后两位的想法,因此我如何改善以下内容?
Math.round(price*Math.pow(10,2))/Math.pow(10,2);
我想要数字10.80、2.40等。使用jQuery对我来说很好。
#1楼
toFixed(n)提供小数点后的n个长度; toPrecision(x)提供x的总长度。
在下面使用此方法
// Example: toPrecision(4) when the number has 7 digits (3 before, 4 after)// It will round to the tenths placenum = 500.2349;result = num.toPrecision(4); // result will equal 500.2
并且,如果您希望该号码固定使用
result = num.toFixed(2);
#2楼
@heridev和我在jQuery中创建了一个小函数。
您可以尝试下一个:
的HTML
<input type="text" name="one" class="two-digits"><br>
<input type="text" name="two" class="two-digits">
jQuery的
// apply the two-digits behaviour to elements with 'two-digits' as their class
$( function() {$('.two-digits').keyup(function(){if($(this).val().indexOf('.')!=-1){ if($(this).val().split(".")[1].length > 2){ if( isNaN( parseFloat( this.value ) ) ) return;this.value = parseFloat(this.value).toFixed(2);} } return this; //for chaining});
});
网上演示:
http://jsfiddle.net/c4Wqn/
#3楼
我通常将其添加到我的个人库中,在提出一些建议并也使用@TIMINeutron解决方案之后,使其适用于十进制长度,这是最合适的:
function precise_round(num, decimals) {var t = Math.pow(10, decimals); return (Math.round((num * t) + (decimals>0?1:0)*(Math.sign(num) * (10 / Math.pow(100, decimals)))) / t).toFixed(decimals);
}
将适用于所报告的异常。
#4楼
我没有找到解决此问题的准确方法,因此我创建了自己的解决方案:
function inprecise_round(value, decPlaces) {return Math.round(value*Math.pow(10,decPlaces))/Math.pow(10,decPlaces);
}function precise_round(value, decPlaces){var val = value * Math.pow(10, decPlaces);var fraction = (Math.round((val-parseInt(val))*10)/10);//this line is for consistency with .NET Decimal.Round behavior// -342.055 => -342.06if(fraction == -0.5) fraction = -0.6;val = Math.round(parseInt(val) + fraction) / Math.pow(10, decPlaces);return val;
}
例子:
function inprecise_round(value, decPlaces) { return Math.round(value * Math.pow(10, decPlaces)) / Math.pow(10, decPlaces); } function precise_round(value, decPlaces) { var val = value * Math.pow(10, decPlaces); var fraction = (Math.round((val - parseInt(val)) * 10) / 10); //this line is for consistency with .NET Decimal.Round behavior // -342.055 => -342.06 if (fraction == -0.5) fraction = -0.6; val = Math.round(parseInt(val) + fraction) / Math.pow(10, decPlaces); return val; } // This may produce different results depending on the browser environment console.log("342.055.toFixed(2) :", 342.055.toFixed(2)); // 342.06 on Chrome & IE10 console.log("inprecise_round(342.055, 2):", inprecise_round(342.055, 2)); // 342.05 console.log("precise_round(342.055, 2) :", precise_round(342.055, 2)); // 342.06 console.log("precise_round(-342.055, 2) :", precise_round(-342.055, 2)); // -342.06 console.log("inprecise_round(0.565, 2) :", inprecise_round(0.565, 2)); // 0.56 console.log("precise_round(0.565, 2) :", precise_round(0.565, 2)); // 0.57