一、為什麼需要浮點數保留2位小數
浮點數是指數值類型,用於表示帶小數部分的數值。在JavaScript中,浮點數使用64位二進位存儲,由於二進位無法精確表示某些分數,因此浮點數經常會出現精度問題,導致運算結果出錯。
在一些需要精確計算金額、統計數據等場景中,需要將浮點數保留2位小數。
二、toFixed()方法
在JavaScript中,使用toFixed()方法可以將一個浮點數保留指定位數的小數。該方法將浮點數轉化為字元串形式,並保留指定位數的小數。例如,使用toFixed(2)方法可以將一個浮點數保留2位小數。
let num = 2.56789;
let result = num.toFixed(2); // "2.57"
需要注意的是,toFixed()方法返回的是一個字元串類型的值,如果要進行數值運算,需要使用parseFloat()或者Number()方法進行轉換。
三、Math.round()方法
Math.round()方法可以將一個浮點數四捨五入到整數,並可以指定保留的小數位數。例如,使用Math.round(num * 100) / 100可以將一個浮點數保留2位小數。
let num = 2.56789;
let result = Math.round(num * 100) / 100; // 2.57
這種方法的缺點是,當要保留的小數位數 非常多時,計算量會很大。
四、Number.prototype.toFixed()方法
除了使用全局對象Math的round()函數,還可以使用Number.prototype上的toFixed()方法來實現浮點數的四捨五入保留指定位數的小數的功能。
var a = 1.23456789;
console.log(a.toFixed(2)); //"1.23"
toFixed()方法可以將數字四捨五入為指定小數位數的數字字元串。例如:a.toFixed(2)返回字元串「1.23」。
五、NUM.toFixed(n)方法
另一種方法是定義一個方法,可以對浮點數進行保留N位小數。這是一個通用的方法,而不僅僅是保留2位小數的方法。
function formatFloat(NUM, decimal) {
let result = parseFloat(NUM);
if (isNaN(result)) {
return "";
}
result = Math.round(NUM * Math.pow(10, decimal)) / Math.pow(10, decimal);
let xsd = result.toString().split(".");
if (xsd.length == 1) {
result = result.toString() + ".";
for (let i = 0; i 1) {
if (xsd[1].length < decimal) {
for (let i = 0; i < decimal - xsd[1].length; i++) {
result = result.toString() + "0";
}
}
}
return result;
}
使用該方法只需要傳入浮點數和需要保留的小數位數即可。
var a = 1.23456789;
console.log(formatFloat(a, 2)); //"1.23"
六、總結
在JavaScript中,浮點數經常會出現精度問題,為了保證計算的精度,需要將浮點數保留指定的小數位數。可以使用toFixed()、Math.round()或者自定義方法進行處理。
//toFixed函數
let num = 2.56789;
let result = num.toFixed(2); // "2.57"
//Math.round函數
let num = 2.56789;
let result = Math.round(num * 100) / 100; // 2.57
//自定義函數
function formatFloat(NUM, decimal) {
let result = parseFloat(NUM);
if (isNaN(result)) {
return "";
}
result = Math.round(NUM * Math.pow(10, decimal)) / Math.pow(10, decimal);
let xsd = result.toString().split(".");
if (xsd.length == 1) {
result = result.toString() + ".";
for (let i = 0; i 1) {
if (xsd[1].length < decimal) {
for (let i = 0; i < decimal - xsd[1].length; i++) {
result = result.toString() + "0";
}
}
}
return result;
}
var a = 1.23456789;
console.log(formatFloat(a, 2)); //"1.23"
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/300427.html