干し草、私はこれらのようないくつかのフロートを持っています
4.3455
2.768
3.67
このように表示したい
4.34
2.76
3.67
数値を四捨五入するのではなく、小数点以下の数値を2に制限します。
あなたが探している 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
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
小数点以下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のソリューションはもう少し堅牢になります。
警告!現在受け入れられているソリューションが失敗する場合があります。 4.27では、誤って4.26を返します。
これは 一般的な解決策 であり、常に機能します。
(多分私はこれをコメントとして入れるべきですが、この執筆の時点では、私は必要な評判を持っていません)
ToPrecisionを使用:)
var y = 67537653.76828732668326;
y = (String(y).indexOf('.') !== -1) ? +y.toPrecision(String(y).indexOf('.') + 2) : +y.toFixed(2);
// => 67537653.76
2行目の2は小数点以下の桁数を示します。文字列で「+」演算子を削除する場合は、この方法で数値が返されます。
皆さん良いニュースです!しばらくの間、代替手段があります: 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)
)