常に小数点以下2桁を表示するように数値をフォーマットします(該当する場合は丸めます)。
例:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
私はこれを使用しています:
parseFloat(num).toFixed(2);
しかし、ではなく1
として表示されています。1
1.00
常に小数点以下2桁を表示するように数値をフォーマットします(該当する場合は丸めます)。
例:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
私はこれを使用しています:
parseFloat(num).toFixed(2);
しかし、ではなく1
として表示されています。1
1.00
回答:
(Math.round(num * 100) / 100).toFixed(2);
ライブデモ
小数点以下2桁に丸められるため、入力1.346
はを返すことに注意してください1.35
。
1
ように表示すること1.00
、および1.341
として表示します1.34
。
Number(1).toFixed(2); // 1.00
Number(1.341).toFixed(2); // 1.34
Number(1.345).toFixed(2); // 1.34 NOTE: See andy's comment below.
Number(1.3450001).toFixed(2); // 1.35
1.34
に表現を与えてくれますNumber(1.345).toFixed(2)
。
1.345
は、浮動小数点に正確に格納できない数値の例であるため、期待どおりに四捨五入されない理由は、実際にはわずかに数値として格納されているためだと思います1.345未満で切り捨てられます。代わりにを使用してテストすると(1.34500001).toFixed(2)
、正しく切り上げられることがわかります1.35
次の場合、この回答は失敗しますvalue = 1.005
。
より良い解決策として、指数表記で表された数値を使用することにより、丸めの問題を回避できます。
Number(Math.round(1.005+'e2')+'e-2'); // 1.01
@Konと元の作者が提案したよりクリーンなコード:
Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
toFixed()
小数点を保持するために最後に追加でき1.00
ます。例:ただし、文字列として返されることに注意してください。
Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces).toFixed(decimalPlaces)
クレジット:JavaScriptでの小数の丸め
toFixed
がその丸めの問題があることを確認できませんでした。あなたの答えは受け入れられたものでなければなりません。
Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
var num = new Number(14.12);
console.log(num.toPrecision(2));//outputs 14
console.log(num.toPrecision(3));//outputs 14.1
console.log(num.toPrecision(4));//outputs 14.12
console.log(num.toPrecision(5));//outputs 14.120
toPrecision
数値を特定の小数点以下の桁数にフォーマットするだけで、冗長な桁は省略しますが、四捨五入はしません。もちろん、これも非常に役立ちますが、違いを理解することが重要です。
(20.55).toPrecision(3) "20.6"
toFixed
:const formattedVal = Number(val.toFixed(2));
Doが使用しないtoPrecision
、高精度のparamを使用している場合、それは非小数をカウントして。
最も正確な丸めのために、次の関数を作成します。
function round(value, decimals) {
return Number(Math.round(value +'e'+ decimals) +'e-'+ decimals).toFixed(decimals);
}
小数点以下2桁に丸めるために使用します。
console.log("seeked to " + round(1.005, 2));
> 1.01
おかげRazu、この記事、およびMDNの恐らくMath.round参照。
最新のブラウザでは、 toLocaleString
:
var num = 1.345;
num.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });
ロケールタグを最初のパラメータとして指定して、 小数点記号。ドットには、たとえば英語のUSロケールを使用します。
num.toLocaleString("en-US", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
それは与える:
1.35
ヨーロッパのほとんどの国ではカンマを小数点記号として使用しているため、たとえばスウェーデン語/スウェーデン語ロケールを使用する場合は、次のようになります。
num.toLocaleString("sv-SE", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
それは与えるでしょう:
1,35
toFixed
既にstackoverflow.com/a/13292833/218196で提案されていました。あなたの質問はどのような追加情報を提供しますか?
toFixed
番号を呼び出す。
N桁に丸めるためのはるかに一般的なソリューション
function roundN(num,n){
return parseFloat(Math.round(num * Math.pow(10, n)) /Math.pow(10,n)).toFixed(n);
}
console.log(roundN(1,2))
console.log(roundN(1.34,2))
console.log(roundN(1.35,2))
console.log(roundN(1.344,2))
console.log(roundN(1.345,2))
console.log(roundN(1.344,3))
console.log(roundN(1.345,3))
console.log(roundN(1.3444,3))
console.log(roundN(1.3455,3))
Output
1.00
1.34
1.35
1.34
1.35
1.344
1.345
1.344
1.346
roundN(-3.4028230607370965e+38,2)
は"-3.4028230607370965e+38"
なく戻ります
var number = 123456.789;
console.log(new Intl.NumberFormat('en-IN', { maximumFractionDigits: 2 }).format(number));
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
すでにjQueryを使用している場合は、jQuery数値形式プラグインの使用を確認できます。
プラグインは、フォーマットされた数値を文字列として返すことができ、小数と桁区切り記号を設定でき、表示する小数を選択できます。
$.number( 123, 2 ); // Returns '123.00'
GitHubからjQuery数値形式を取得することもできます。
これはどういう意味ですか?
function showAsFloat(num, n){
return !isNaN(+num) ? (+num).toFixed(n || 2) : num;
}
document.querySelector('#result').textContent =
[
'command | result',
'-----------------------------------------------',
'showAsFloat(1); | ' + showAsFloat(1),
'showAsFloat(1.314); | ' + showAsFloat(1.314),
'showAsFloat(\'notanumber\') | ' + showAsFloat('notanumber'),
'showAsFloat(\'23.44567\', 3) | ' + showAsFloat('23.44567', 3),
'showAsFloat(2456198, 5) | ' + showAsFloat('2456198', 5),
'showAsFloat(0); | ' + showAsFloat(0)
].join('\n');
<pre id="result"></pre>
特定のフォーマットが必要な場合は、独自のルーチンを作成するか、必要なことを行うライブラリ関数を使用する必要があります。基本的なECMAScript機能は、通常、フォーマットされた数値を表示するには不十分です。
丸めとフォーマットの詳細な説明はこちらです:http : //www.merlyn.demon.co.uk/js-round.htm#RiJ
原則として、丸めとフォーマットは、出力前の最後のステップとしてのみ実行する必要があります。これを早期に行うと、予期しない大きなエラーが発生し、フォーマットが破壊される可能性があります。
function number_format(string,decimals=2,decimal=',',thousands='.',pre='R$ ',pos=' Reais'){
var numbers = string.toString().match(/\d+/g).join([]);
numbers = numbers.padStart(decimals+1, "0");
var splitNumbers = numbers.split("").reverse();
var mask = '';
splitNumbers.forEach(function(d,i){
if (i == decimals) { mask = decimal + mask; }
if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; }
mask = d + mask;
});
return pre + mask + pos;
}
var element = document.getElementById("format");
var money= number_format("10987654321",2,',','.');
element.innerHTML = money;
#format{
display:inline-block;
padding:10px;
border:1px solid #ddd;
background:#f5f5f5;
}
<div id='format'>Test 123456789</div>
あなたは私たちに全体像を与えていません。
javascript:alert(parseFloat(1).toFixed(2))
ロケーションバーに貼り付けると、ブラウザに1.00と表示されます。ただし、後で何かをすると、元に戻ります。
var num = 2
document.getElementById('spanId').innerHTML=(parseFloat(num).toFixed(2)-1)
shows 1 and not 1.00
var quantity = 12;
var import1 = 12.55;
var total = quantity * import1;
var answer = parseFloat(total).toFixed(2);
document.write(answer);
toFixed()を呼び出す前に、parseFloat()変換とNumber()変換のどちらかを決定する必要がありました。これは、数値フォーマット後のキャプチャ後のユーザー入力の例です。
HTML:
<input type="number" class="dec-number" min="0" step="0.01" />
イベントハンドラー:
$('.dec-number').on('change', function () {
const value = $(this).val();
$(this).val(value.toFixed(2));
});
上記のコードではTypeError例外が発生します。html入力タイプは「数値」ですが、ユーザー入力は実際には「文字列」データタイプであることに注意してください。ただし、toFixed()関数は、Numberであるオブジェクトに対してのみ呼び出すことができます。
最終的なコードは次のようになります。
$('.dec-number').on('change', function () {
const value = Number($(this).val());
$(this).val(value.toFixed(2));
});
Number()とparseFloat()を使用してキャストするほうがよい理由は、空の入力文字列やNaN値のどちらについても追加の検証を実行する必要がないためです。Number()関数は自動的に空の文字列を処理し、それをゼロに変換します。
ほんとに好き:
var num = 12.749;
parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75
数値を小数点以下2桁で四捨五入してから、それを解析してparseFloat()
、StringではなくNumberを返すようにしてください。StringとNumberのどちらでもかまいません。
parseFloat("1.00") // 1
高精度メソッドを使用してMathオブジェクトを拡張する
Object.defineProperty(Math, 'precision',{
value: function (value,precision,type){
var v = parseFloat(value),
p = Math.max(precision,0)||0,
t = type||'round';
return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p);
}
});
console.log(
Math.precision(3.1,3), // round 3 digits
Math.precision(0.12345,2,'ceil'), // ceil 2 digits
Math.precision(1.1) // integer part
)
あなたはこのコードを試すことができます:
function FormatNumber(number, numberOfDigits = 2) {
try {
return new Intl.NumberFormat('en-US').format(parseFloat(number).toFixed(2));
} catch (error) {
return 0;
}
}
var test1 = FormatNumber('1000000.4444');
alert(test1); // 1,000,000.44
var test2 = FormatNumber(100000000000.55555555, 4);
alert(test2); // 100,000,000,000.56