Javascript parse floatは、コンマの後の小数を無視しています


81

これが簡単なシナリオです。私のサイトに表示されている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

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

回答:


159

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

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

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

9
これはすべての地域で機能しますか?OSの地域設定によってはカンマを使用していませんか?
Dusan Plavak 2015年

14
上記のコードは、最初の「、」のみを削除します。数が700,000,000の場合はどうなりますか?必要なもの:.replace(/、/ g、 '')
hyankov 2015

17
ほとんどの人は、カンマが小数点記号としてだけでなく、千単位の区切り文字としても使用できることを忘れていると思います。
Peter Raeves 2016年

3
こんにちは。入力が5.200,755,225を意味する場合はどうでしょうか。
hasan 0519年

この回答は現在のシナリオでのみ機能します。たとえば、数値が15,000の場合、15と表示されますが、これは正しくありません。
itsHarshad

31

javascriptのparseFloatはロケールパラメータを取りません。だから、交換する必要があります,.

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

19
数が7,000,000.15の場合はどうなりますか?
Peter Raeves 2016年

7
文字列を解析しようとするときは、文字列をフロートのように見せることを担当します。ロケールで小数点にピリオドが使用されている場合は、フロートに解析する前に、すべてのコンマ(数千の区切り文字)を安全に削除できます。ロケールで小数点にピリオドの代わりにコンマを使用している場合は、任意のピリオド(1000の区切り文字)を安全に削除してから、コンマ(小数点)をピリオドに変更できます。
Ultroman the Tacoman 2017年



12

@JaredParが彼の答えで指摘したようにparseFloat、replaceで使用する

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

ただ、交換するcommadot、意志の修正がない限り、それはのような何千を超える数だ1.000.000,00この方法はあなたに間違った数字を与えるだろう。だから、交換する必要がありますcomma削除dots

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

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


8

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

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

gすべてのコンマを削除するための手段。

ここでJsfiddleデモを確認してください。


7

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


1

カンマ(,)とピリオド().が関係しているかもしれないが、正確な数値形式がわからない可能性があるこの問題に対処する方法を考えてここに到着した人のために-これは私が使用する前に文字列を修正する方法ですparseFloat()(他の答えからアイデアを借ります):

function preformatFloat(float){
   if(!float){
      return '';
   };

   //Index of first comma
   const posC = float.indexOf(',');

   if(posC === -1){
      //No commas found, treat as float
      return float;
   };

   //Index of first full stop
   const posFS = float.indexOf('.');

   if(posFS === -1){
      //Uses commas and not full stops - swap them (e.g. 1,23 --> 1.23)
      return float.replace(/\,/g, '.');
   };

   //Uses both commas and full stops - ensure correct order and remove 1000s separators
   return ((posC < posFS) ? (float.replace(/\,/g,'')) : (float.replace(/\./g,'').replace(',', '.')));
};
// <-- parseFloat(preformatFloat('5.200,75'))
// --> 5200.75

少なくとも、これにより、英国/米国およびヨーロッパの10進形式の解析が可能になります(文字列に有効な数値が含まれていると想定)。


それは両方のフォーマットのために素晴らしい作品1,234.561.234,56
joseantgv

0

私の場合、私はすでにピリオド(.)とコンマを持っていた(,)ので、私のために働いたのはreplace(,)以下のような空の文字列を含むコンマでした:

parseFloat('3,000.78'.replace(',', '')) 

これは、既存のデータベースからの量が3,000.78であることを前提としています。結果は次のとおりです。3000.78最初のコンマなし(,)


-1

私の出身国からの通貨形式は「3.050,89€」のようなものです

parseFloatは、ドットを小数点として識別します。2つの値を追加するには、次のように入力します。

parseFloat(element.toString().replace(/\./g,'').replace(',', '.'))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.