プロが教えるわが家の防犯対策術!

数値を取得して消費税計算をして四捨五入して、あとは3桁区切りでカンマを付けて戻すだけなのですが、カンマの付け方がわかりません。
よろしくお願いします。

<script type="text/javascript">
var tax = 1.05;
var targetClass='.price';
$(function() {
$(targetClass).each(function(){
var price_a = $(this).text();
var price_b = price_a.replace(/,/g, "");
var price_c = price_b * tax;
var price_d = Math.round(price_c);
//切り上げ var price_d = Math.ceil(price_c);
//切り捨て var price_d = Math.floor(price_c);
$(this).text(price_d);
});
});
</script>

<p class="price">1,000</p>
<p class="price">1,250</p>
<p class="price">1,360</p>
<p class="price">1,450</p>
<p class="price">1,550</p>
<p class="price">1,600</p>

A 回答 (4件)

> エラーが出てしまう



price_d を文字列にしましょう。

var price_d = Math.round(price_c).toString();
または
var price_d = "" + Math.round(price_c);


> 「var ○○○」がずらっと並んでいる

そもそも計算途中の変数に "price_" は余分だと思いますので削除するとすっきりします

var a = $(this).text();
var b = parseInt( a.replace(/,/g, "") ); // 安全のために parseInt は必要でしょう
var c = b * tax;
var d = Math.round(c).toString();

さらに変数定義はカンマ区切りで列挙できますので

var a = $(this).text(),
b = parseInt( a.replace(/,/g, "") ),
c = b * tax,
d = Math.round(c).toString();

そもそも計算途中の変数など不要だと思うなら

var d = $(this).text();
d = parseInt( a.replace(/,/g, "") );
d *= tax;
d = Math.round(d).toString();

伝統芸である One-liner/一行野郎 の作法に従うなら
参考) http://en.wikipedia.org/wiki/One-liner_program

var d = Math.round(parseInt($(this).text().replace(/,/g, "")) * tax).toString();

ですが結局はずらずら書くのが、一番安全で間違いのない記述ではないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。
色々な記述方法があるんですね…、非常に参考になりました!

お礼日時:2013/11/08 21:15

>もう少し簡略化して記述する方法はないでしょうか


ある程度意味的にまとめてください

それから途中のあまり重要でない変数の名前は思いつかなければ
numやstrなど適当でもいいと思います

var input = $(this).text(); //読み込み
var num = +input.replace(/,/g, ""); //テキスト文字を数値に直す
var price = Math.floor(num * tax); //税込み価格を出す
var output = price.toLocaleString() //3桁区切りにする
$(this).text(output); //書き込み

もしくは正規化やパースの部分、入力出力の部分はもっとまとめてもいいと思います

var zeinuki = +$(this).text().replace(/,/g, ""); //税抜き価格を取得
var zeikomi = Math.floor(zeinuki * tax); //税込みにする
$(this).text(zeikomi.toLocaleString()); //税込み価格を出力
    • good
    • 0
この回答へのお礼

ありがとうございました。
意味的にまとめるといいのですね、参考になりました!

お礼日時:2013/11/08 21:15

文字列にして正規表現よる置換が一番確実でしょう



"1234567890".replace(/(\d)(?=(\d{3})+$)/g, "$1,")

この回答への補足

ありがとうございます。
下記にしてやるとエラーが出てしまうのですが、どうしたらいいでしょうか。
ご教授下さい。

var price_e = price_d.replace(/(\d)(?=(\d{3})+$)/g, "$1,")

補足日時:2013/11/07 18:56
    • good
    • 0

モダンブラウザであればNumber.prototype.toLocaleStringでできます


n = 12345
n.toLocaleString() // "12,345"
    • good
    • 0
この回答へのお礼

ありがとうございます。うまくいきました。
もう一つ質問があるのですが、現在「var ○○○」がずらっと並んでいるのですが、これをもう少し簡略化して記述する方法はないでしょうか。
よろしくお願いします。

お礼日時:2013/11/07 17:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!