2017-01-13 5 views
0

はjqueryのなるほどログで

var sssee = "581.30"; 
 
var ssser = "1,178.70"; 
 

 

 
var ssee = sssee.trim().replace(/,/g, ""); 
 
var sser = ssser.trim().replace(/,/g, ""); 
 
console.log("ee " + ssee) 
 
console.log("er " + sser) 
 
console.log("total " + parseFloat(ssee + sser))

フロートを追加:

EE 581.30

ER 1178.70

総581.301178

,を取り除くためにreplaceを追加すると計算が乱れるのはなぜですか?

+0

[Oh my ...](https://i.stack.imgur.com/ssRUr.gif) – some

答えて

7

変数sseesserは両方とも文字列です。 ssee + sserを実行すると、文字列581.301178.70が返され、parseFloat関数に渡されます。小数点以下2桁がある場合、最初のもののみが正しいとみなされます。そのため、parseFloat581.301178を返します。

スニペットを正しい解決策でチェックしてください。

var sssee = 581.30; 
 
var ssser = "1178.70"; 
 

 

 
var ssee = String(sssee).trim().replace(/,/g, ""); 
 
var sser = String(ssser).trim().replace(/,/g, ""); 
 

 
console.log("ee " + ssee) 
 
console.log("er " + sser) 
 
console.log("total " + (parseFloat(ssee) + parseFloat(sser)))

またtrimreplaceメソッドを使用する前に、Stringオブジェクト内のsseessserをラップする必要があります。これらの変数を文字列の代わりに浮動小数点として指定すると、コードが機能しなくなります。

+0

なぜそれが機能しなかったのか説明を追加できますか? – Martin

+0

あります:) –

+0

'sssee' float変数をstringにしないと、あなたのコードはエラーを投げるので注意してください。メソッド 'trim'と' replace'は 'String'プロトタイプのメンバです。 –

1

あなたの問題:

あなたは1つの文字列( "581.301178.70")に( "581.30" + "1,178.70")2つの文字列を連結します。次にそれを浮動小数点数に解析します(581.301178)。

ソリューション:

最初にフロートに解析する必要があります。あなたの追加後(parseFloat(ssee) + parseFloat(sser))。

関連する問題