web-dev-qa-db-ja.com

JavaScriptで文字列をfloatに変換する方法

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

232
F40

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

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

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

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

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

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

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

ハンディ!

それであなたの問題を解決するために、あなたはこのようなことをすることができます:

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

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

これは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()を呼び出しても数値は丸められません:それはそのフロア(最も低い整数)を取ります。


コメントからPedro Ferreiraの質問に答えるための拡張例:

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

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

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

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

..あなたはこれを実行することができます

"554,20".float()
> 554.20

ドットも使えます

"554.20".float()
> 554.20

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

この機能を使うことができます。それはコンマを ''に置き換え、それから値を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;
    }
3
Muhammad Bilal

@GusDeCoolまたは他の誰かが何千もの区切り文字を置き換えようとしている、それを行う1つの方法は正規表現のグローバル置き換えです:/foo/g.はメタ文字であることを忘れないでください。そのため、\.をエスケープするか括弧で囲む必要があります([.]またはvar str = '6.000.000'; str.replace(/[.]/g,","); )。これが一つの選択肢です:

__コード__
3
Nick Benes

やってみる

let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);

console.log({float,int});
0

私は何千もの区切り文字と小数点の区切り文字が何であるかを前もって知らなかった以外は同じ問題を抱えていました。私はこれを行うためのライブラリを書きました。あなたがここでそれに興味を持っているならば、それはそうです: https://github.com/GuillaumeLeclerc/number-parsing

0
DARK_DUCK