JavaScript中浮點數保留2位小數

一、為什麼需要浮點數保留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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-29 12:51
下一篇 2024-12-29 12:51

相關推薦

發表回復

登錄後才能評論