小計である変数yがあります。その値はhtmlで何が起こるかによって異なりますが、スクリプト全体で次のように宣言しました。
var y = 21.78;
合計を合計する最後の式で、値を追加するときに文字列として扱われるのはなぜですか?
var tax = (0.055*y).toFixed(2);
var totalprice = y+tax;
/* totalprice holds "21.781.20" instead of 22.98 */
小計である変数yがあります。その値はhtmlで何が起こるかによって異なりますが、スクリプト全体で次のように宣言しました。
var y = 21.78;
合計を合計する最後の式で、値を追加するときに文字列として扱われるのはなぜですか?
var tax = (0.055*y).toFixed(2);
var totalprice = y+tax;
/* totalprice holds "21.781.20" instead of 22.98 */
によると:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/toFixed
toFixed()
戻り値:
指数表記を使用せず、小数点以下の桁数が正確に含まれる数値の文字列表現。
したがって、y+tax
オペランドの1つが文字列であるため、文字列にキャストされます。
私の意見では、Javascriptの固有の数値型には特定の小数点以下の桁数を格納する機能がないため、これは理にかなっています。したがって、これを格納するのに最も適切なデータ構造は文字列です。
このメソッドは表示出力のフォーマットに最も適しているため、を呼び出す前にすべての追加を行うことをお勧めします。toFixed()
var taxRate = 0.055;
var subtotal = 21.78;
var tax = (taxRate * subtotal).toFixed(2),
totalprice = ((1+taxRate) * subtotal).toFixed(2);
document.write(totalprice);
.toFixed()メソッドは文字列を返します。他のすべての計算の後の最後のステップとして、その方法を適用してみてください。
これが簡単な修正です。税変数の前に「+」を付けて、数値に変換します。
var y = 21.78;
var tax = (0.055*y).toFixed(2);
var totalprice = y+ (+tax);
totalprice === 22.98;
toFixedを使用するときに丸め誤差が必要ない場合は、この再実装をスクリプトに含めてください。 http://bateru.com/news/2012/03/reimplementation-of-number-prototype-tofixed/
私の経験では、機会があれば、Javascriptは「+」記号を追加ではなく連結として認識します。それは私を何度も狂わせました。私は通常、偶然の連結ではなく、これを行います。
var totalprice = parseInt(y)+parseInt(tax);
文字が値を置き換える場合1
は、必要なときに乗算します+
。
var totalprice = (y*1) + tax .
他のオペランドは正常に機能し+
ます。変数が値を置き換えるときに特別な処理が必要なのはオペランドだけです。