2017-06-16 16 views
0

私は次のような場合:私はそれを返すようにしたいときJavascriptの解析int型丸め問題

parseInt(parseFloat(9.20)*100*1)/100 // returns 9.19 

それは9.19を返し9.20何私はそれが正しい値を返すために取得するために変更する必要がありますか?

私はそれを変更したとき、私は同じ問題を持っている:

parseInt(parseFloat(9.12)*100*1)/100 // returns 9.11 

しかし、他の値が正常に動作します:

parseInt(parseFloat(9.30)*100*1)/100 // returns 9.30 (correct) 

はUPDATE:

ソリューションは、このました

(Math.round(9.20*100*1)/100).toFixed(2) 
+0

これはほとんどのプログラミング言語(JavaScriptを含む)では動作しません。バイナリ浮動小数点は、単に一部の値を正確に表すことはできません。 –

+0

コードが意味をなさない...なぜ9.12/100 * 100? –

+0

[this](https://www.w3schools.com/js/js_numbers.asp)が助けになるかもしれない –

答えて

0

Jav aScriptは2進算術を使用し、浮動小数点数は10進数の近似値です。

これを避ける1つの方法は、積分演算を実行することですが、小数点を整数に変換するのに十分な係数で掛けて、同じ因子で回答を戻します。

この場合、最初に文字列を操作していないため、なぜparseInt()またはparseFloat()を使用しているのかわかりません。

最後に、parseInt()を使用する場合は、2番目の(オプションの)引数を使用して基数システム(操作を実行するために使用するベース数値システム)を指定することをお勧めします。 "0"または "0x"で始まります。

var result = parseInt(9.2*10, 10)/10 // returns 9.19 
 

 
console.log(result);

1

問題はJavaScriptで9.20*100が原因浮動小数点エラーの、919.9999999999999、なく920を返すことです。 parseInt()を実行すると、最も近い整数に丸められず、代わりに919に切り捨てられます。そのため、最終的な答えが間違っています。

parseInt()の代わりに、より良い使用方法はMath.round()です。このメソッドは最も近いintに丸めて、919.99999920に変換し、正しい答えを返します。

+0

これはこれを行ったようです。私は '(Math.round(parseFloat(9.20)* 100 * 1)/ 100).toFixed(2)//に変更しました。//" 9.20 "を返します。 – fidler2326

+0

私はあなたのコードにparseFloat()はまったく必要ないと付け加えたいだけです。parseFloatは '' 9.2 "'のような文字列をfloat '9.2'に変換するために使われます。あなたの数字は文字列ではなく既にfloatであるように見えるので、 'parseFloat()'を完全に削除することができます。私はあなたがなぜ1を乗じているように見えるのか少し不思議です。 –