データグリッドから2つの値を解析しようとしています。フィールドは数値であり、カンマがある場合(例:554,20)、カンマの後の数値を取得できません。私が試したparseInt
とparseFloat
。これどうやってするの?
データグリッドから2つの値を解析しようとしています。フィールドは数値であり、カンマがある場合(例:554,20)、カンマの後の数値を取得できません。私が試したparseInt
とparseFloat
。これどうやってするの?
回答:
それらが別々の値であることが意図されている場合は、これを試してください:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
それらが単一の値であることを意図している場合(フランス語のように、半分が0,5と書かれている場合)
var value = parseFloat("554,20".replace(",", "."));
+(string)
代わりにparseString(string)
を使用できます。したがって、最初の例はになりますv1 = +(values[0]); v2 = +(values[1]);
。
6.000.000
。関数replaceは最初のカンマ区切りのみを置き換える
コンマをドットに置き換えます。
これは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(",","."))
このようにStringオブジェクトを拡張すると
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
..このように実行できます
"554,20".float()
> 554.20
ドットでも動作します
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
この機能を使用できます。カンマを「」に置き換え、値を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;
}
千桁区切りと小数点区切りが何であるかを事前に知らなかった以外は、同じ問題がありました。これを行うためのライブラリを作成することになりました。興味がある場合は、こちらをご覧ください:https : //github.com/GuillaumeLeclerc/number-parsing
試す
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});