JavaScriptで文字列をフロートに変換する方法は?


255

データグリッドから2つの値を解析しようとしています。フィールドは数値であり、カンマがある場合(例:554,20)、カンマの後の数値を取得できません。私が試したparseIntparseFloat。これどうやってするの?


次も参照してください: stackoverflow.com/questions/24318654
dreftymac

回答:


371

それらが別々の値であることが意図されている場合は、これを試してください:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

それらが単一の値であることを意図している場合(フランス語のように、半分が0,5と書かれている場合)

var value = parseFloat("554,20".replace(",", "."));

6
1000の区切り記号として使用されるコンマがある場所はどうですか?たとえば、1234と書かれた1234
Chris B

6
カンマを削除して解析するだけです。(例: ""で置き換えてください)
Jesse Rusak

7
sconto = parseFloat( "5、、5" .replace( "、"、 "。"));ので、それほど安全ではありません。有効な数値であると信じるように先頭の5を返しますが、.5の部分を
失う

1
@ max4ever無効な数値を黙って受け入れることを心配している場合は、以下の@Stevで提案されている+(string)代わりにparseString(string)を使用できます。したがって、最初の例はになりますv1 = +(values[0]); v2 = +(values[1]);
Jesse Rusak

1
FAIL、どのような私の電話番号がある場合6.000.000。関数replaceは最初のカンマ区切りのみを置き換える
GusDeCooL

55

これをやろうとしたことがありますか?:p

var str = '3.8';ie
alert( +(str) + 0.2 );

+(string)はstringをfloatにキャストします。

ハンディ!

したがって、問題を解決するには、次のようにします。

var floatValue = +(str.replace(/,/,'.'));

7
私は+(str)ソリューションが本当に好きです- parseFloat数字の後ろの無効な文字を無視し、それらの場合に+(str)は戻りますNaN、それはまさに私が必要とするものです。
アレックス

34

コンマをドットに置き換えます。

これは554のみを返します。

var value = parseFloat("554,20")

これは554.20を返します。

var value = parseFloat("554.20")

つまり、最終的には次のように簡単に使用できます。

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

parseInt()整数の解析(浮動小数点ではない)にのみ使用することを忘れないでください。あなたの場合、それは554のみを返します。さらに、floatでparseInt()を呼び出しても、数値は丸められません:床(最も近い整数)になります。


コメントからのペドロフェレイラの質問に答える拡張例:

テキストフィールドに何千もの区切りドットが含まれている場合、1.234.567,99それらのように、別のドットで事前に削除できますreplace

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))

「。」はどうですか?何千もの区切り?4.554,20のように何が返されますか?
ペドロフェレイラ

16

このようにStringオブジェクトを拡張すると

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

..このように実行できます

"554,20".float()
> 554.20

ドットでも動作します

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

10
通常、基本オブジェクトのプロトタイプを変更することは悪い形と考えられています。別のフレームワークもそれを試みたが、機能が異なる場合はどうなりますか?
phreakhead 2013年

3

@GusDeCoolまたは1000を超えるセパレータを置換しようとする他の誰かがこれを行う1つの方法は、正規表現のグローバル置換です/foo/g。それ.はメタキャラクターであることを覚えておいてください。そのため、それをエスケープするか、大括弧(\.または[.])に入れる必要があります。1つのオプションは次のとおりです。

var str = '6.000.000';
str.replace(/[.]/g,",");

1
ええ、正規表現なしの置換は、文字の1つの出現のみを置換します。
Aukhan

2

この機能を使用できます。カンマを「」に置き換え、値をparseFlaotした後、値のコンマを再度調整します。

function convertToFloat(val) {
        if (val != '') {
            if (val.indexOf(',') !== -1)
                val.replace(',', '');
            val = parseFloat(val);
            while (/(\d+)(\d{3})/.test(val.toString())) {
                val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
            }
        }
        return val;
    }


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