web-dev-qa-db-ja.com

Javascript解析フロートはコンマの後の小数点を無視しています

これは簡単なシナリオです。私のサイトに表示されている2つの値の減算を表示したい:

//Value on my websites HTML is: "75,00"
var fullcost = parseFloat($("#fullcost").text()); 

//Value on my websites HTML is: "0,03"
var auctioncost = parseFloat($("#auctioncost").text());

alert(fullcost); //Outputs: 75
alert(auctioncost); //Ouputs: 0

誰が私が間違っているのか教えてもらえますか?

65

これは「設計による」です。 parseFloat関数は、inが+、-、数字、指数、または小数点以外に達するまで、文字列の部分のみを考慮します。カンマが見つかると、検索を停止し、「75」部分のみを考慮します。

これを修正するには、コンマを小数点に変換します。

var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));
121
JaredPar

javascriptのparseFloatはロケールパラメータを取りません。したがって、,.に置き換える必要があります

parseFloat('0,04'.replace(/,/, '.')); // 0.04
25
Joe

parseFloat JavaScriptに従って解析 ロケールの定義ではなく、10進リテラルの定義 (たとえば、parseFloatはロケールを認識しません。)JavaScriptの10進リテラルは、小数点に.を使用します。

17
T.J. Crowder

グローバル化を使用しないのはなぜですか?これは、英語を使用していないときに実行できる問題の1つにすぎません。

Globalize.parseFloat('0,04'); // 0.04

調べるべきstackoverflowのリンク:

16
jamie

@ -JaredParが his answer で指摘したように parseFloat 置換あり

var fullcost = parseFloat($("#fullcost").text().replace(',', '.'));

commadotに置き換えるだけで修正されます。Unless1.000.000,00のような数千を超える数は、この方法で間違った数字を与えます。したがって、commaを置き換えてdotsを削除する必要があります。

// Remove all dot's. Replace the comma.
var fullcost = parseFloat($("#fullcost").text().replace(/\./g,'').replace(',', '.'));

2つの置換を使用すると、出力で間違った数字を受け取ることなくデータを処理できます。

10
Michel Ayres

JSの数字は、.(コンマ)ではなく小数点を示すために,(ピリオド/ピリオド)文字を使用します。

5
Quentin

100万1,234,567の場合、この構文を使用してすべてのコンマを置き換えることをお勧めします

var string = "1,234,567";
string = string.replace(/[^\d\.\-]/g, ""); 
var number = parseFloat(string);
console.log(number)

gは、すべてのコンマを削除することを意味します。

Jsfiddle demo here を確認してください。

4