[解決済み] JavaScriptの計算、小数点以下2桁に丸める [重複]。
質問
次のようなJavaScriptの構文があります。
var discount = Math.round(100 - (price / listprice) * 100);
これは整数に切り上げられます。小数点以下2桁の結果を返すにはどうしたらよいでしょうか?
どのように解決するのですか?
注 - 3桁の精度が重要な場合は、編集4章を参照してください。
var discount = (price / listprice).toFixed(2);
toFixed は、小数点以下2桁以上の値に応じて、切り上げまたは切り下げを行います。
例 http://jsfiddle.net/calder12/tv9HY/
ドキュメンテーション https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
編集 - 他の方もおっしゃっているように、これは結果を文字列に変換してしまいます。これを避けるには
var discount = +((price / listprice).toFixed(2));
編集2 - コメントにもあるように、この関数はいくつかの精度で失敗します。例えば1.005の場合、1.01ではなく1.00を返します。もし、この程度の精度が重要であれば、私はこの答えを見つけました。 https://stackoverflow.com/a/32605063/1726511 私が試したすべてのテストでうまく機能しているようです。
例えば、99.004は99.00ではなく99を返すので、価格を表示するのには理想的ではありません。
編集3 - 実際のリターンにtoFixedがあることで、まだいくつかの数値が狂っていたようです。この最終編集でうまくいくようです。いやはや、何度も作り直したものです。
var discount = roundTo((price / listprice), 2);
function roundTo(n, digits) {
if (digits === undefined) {
digits = 0;
}
var multiplicator = Math.pow(10, digits);
n = parseFloat((n * multiplicator).toFixed(11));
var test =(Math.round(n) / multiplicator);
return +(test.toFixed(digits));
}
Fiddleの例はこちら。 https://jsfiddle.net/calder12/3Lbhfy5s/
4を編集 - お前らに殺される。編集3は負の数で失敗しました。なぜ負の数を正にしてから丸めを行い、結果を返す前に正に戻す方が簡単なのかを掘り下げることなくです。
function roundTo(n, digits) {
var negative = false;
if (digits === undefined) {
digits = 0;
}
if (n < 0) {
negative = true;
n = n * -1;
}
var multiplicator = Math.pow(10, digits);
n = parseFloat((n * multiplicator).toFixed(11));
n = (Math.round(n) / multiplicator).toFixed(digits);
if (negative) {
n = (n * -1).toFixed(digits);
}
return n;
}
関連
-
親子コンポーネント通信を解決する3つのVueスロット
-
fetch ネットワークリクエストラッパーの説明例
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
-
jq は html ページとデータを動的に分割する。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
Vueでルートネスティングを実装する例
-
vueにおけるfilterの適用シーンについて解説します。
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方
-
[解決済み] JavaScriptで小数点以下が2つだけの数値を書式設定する