web-dev-qa-db-ja.com

JavaScriptで小数点以下の桁数を制限する

干し草、私はこれらのようないくつかのフロートを持っています

4.3455
2.768
3.67

このように表示したい

4.34
2.76
3.67

数値を四捨五入するのではなく、小数点以下の数値を2に制限します。

30
dotty

あなたが探している toFixed

var x = 4.3455;
alert(x.toFixed(2)); // alerts 4.35 -- not what you wanted!

...しかし、丸めではなく切り捨てたいので、次のようにします。

var x = 4.3455;
x = Math.floor(x * 100) / 100;
alert(x.toFixed(2)); // alerts 4.34
46
T.J. Crowder

T.Jが答えたように、toFixedメソッドは必要に応じて適切な丸めを行います。また、後続のゼロも追加されますが、これは常に理想的ではありません。

(4.55555).toFixed(2);
//-> "4.56"

(4).toFixed(2);
//-> "4.00"

戻り値を数値にキャストすると、後続のゼロは削除されます。これは、独自の丸めや切り捨ての計算を行うよりも簡単な方法です。

+parseFloat((4.55555).toFixed(2));
//-> 4.56

+parseFloat((4).toFixed(2));
//-> 4
10
C. J.

小数点以下2桁に丸めたくない場合は、toFixed()を使用してn小数点以下の桁に丸め、2を除くすべてを切り捨てます。

_var num = 4.3455.toFixed(20);
alert(num.slice(0, -18));
//-> 4.34
_

toFixed()に渡される小数点以下の桁数が、渡された実際の数値の小数点以下の桁数より少なく、これらの小数点以下の桁数が大きい場合、丸めのわずかな欠点があることに注意してください。たとえば、_(4.99999999999).toFixed(10)_は_5.0000000000_を提供します。ただし、小数点以下の桁数がtoFixed()に渡される桁数よりも少ないことを確認できる場合、これは問題ではありません。ただし、@ TJのソリューションはもう少し堅牢になります。

6
Andy E

警告!現在受け入れられているソリューションが失敗する場合があります。 4.27では、誤って4.26を返します。

これは 一般的な解決策 であり、常に機能します。

(多分私はこれをコメントとして入れるべきですが、この執筆の時点では、私は必要な評判を持っていません)

5
SC1000

ToPrecisionを使用:)

var y = 67537653.76828732668326;
y = (String(y).indexOf('.') !== -1) ? +y.toPrecision(String(y).indexOf('.') + 2) : +y.toFixed(2);
// => 67537653.76

2行目の2は小数点以下の桁数を示します。文字列で「+」演算子を削除する場合は、この方法で数値が返されます。

1
mmgc84

皆さん良いニュースです!しばらくの間、代替手段があります: toLocaleString()

丸めのために正確に作成されているわけではありませんが、いくつかの便利なオプション引数があります。

minimumIntegerDigits

使用する整数桁の最小数。可能な値は1>〜21です。デフォルトは1です。

minimumFractionDigits

使用する小数桁の最小数。

可能な値は0>〜20です。単純な数値とパーセント形式のデフォルトは0です。 t

通貨フォーマットのデフォルトは、ISO 4217通貨コードリストによって提供されるマイナーユニットの桁数です(リストがその情報を提供しない場合は2)。

maximumFractionDigits

使用する小数桁の最大数。

可能な値は0>〜20です。プレーンな数値フォーマットのデフォルトは、minimumFractionDigitsと3の大きい方です。

通貨フォーマットのデフォルトは、minimumFractionDigitsとISO 4217通貨コードリストによって提供されるマイナーユニットの桁数の大きい方です(リストにその情報が含まれていない場合は2)。パーセント形式のデフォルトは、minimumFractionDigitsと0の大きい方です。

minimumSignificantDigits

使用する有効数字の最小数。可能な値は1〜21です。デフォルトは1です。

maximumSignificantDigits

使用する有効数字の最大数。可能な値は1〜21です。デフォルトは21です。

使用例:

var bigNum = 8884858284485 * 4542825114616565
var smallNum = 88885 / 4545114616565

console.log(bigNum) // Output scientific

console.log(smallNum) // Output scientific

// String
console.log(
  bigNum.toLocaleString('fullwide', {useGrouping:false})
) 

// Return a string, rounded at 12 decimals
console.log(
  smallNum.toLocaleString('fullwide', {maximumFractionDigits:12})
)

// Return an Integer, rounded as need, js will convert it back to scientific!
console.log(
  +smallNum.toLocaleString('fullwide', {maximumFractionDigits:12})
)

// Return same Integer, don't use parseInt for precision!
console.log(
  parseInt(smallNum.toLocaleString('fullwide', {maximumFractionDigits:12}))
)

しかしこれは質問と一致しません、丸められます:

function cutDecimals(number,decimals){
  return number.toLocaleString('fullwide', {maximumFractionDigits:decimals})
}

console.log(
  cutDecimals(4.3455,2),
  cutDecimals(2.768,2),
  cutDecimals(3.67,2)
)

1
NVRM