38

これを処理するための良い方法はどのようになりますか?

カンマを削除してから、解析してフロートすることをすでに考えていました。

より良い/よりクリーンな方法を知っていますか?

ありがとう

4

7 に答える 7

83
parseFloat( theString.replace(/,/g,'') );
于 2010-07-08T16:17:40.647 に答える
17

なぜ誰もこの表現を提案していないのか分かりません-

parseFloat( theString.replace(/[^\d\.]/g,'') );

ピリオドを除くすべての非数字文字を削除します。これにもカスタム関数/ループは必要ありません。それはやり過ぎです。

于 2016-01-30T17:26:22.450 に答える
13

いいえ。カンマを削除します。

于 2010-07-08T16:15:35.097 に答える
6

文字列置換メソッドを使用できますが、正規表現で許可されているように1つのライナーでは使用できません。

while(str.indexOf(',')!=-1)str= str.replace(',','');
parseFloat(str);

または、regexp=なしで単一の式を作成します

return parseFloat(str.split(',').join(''));

正規表現を使用します。

于 2010-07-08T18:05:03.097 に答える
4

コメントを追加するのに十分な評判はありませんが、正規表現と分割/参加のパフォーマンスについて疑問に思っている人のために、簡単なフィドルを示します:https ://jsfiddle.net/uh3mmgru/

var test = "1,123,214.19";

var t0 = performance.now();
for (var i = 0; i < 1000000; i++)
{
    var a = parseFloat(test.replace(/,/g,''));
}
var t1 = performance.now();
document.write('Regex took: ' + (t1 - t0) + ' ms');
document.write('<br>')

var t0 = performance.now();
for (var i = 0; i < 1000000; i++)
{
    var b = parseFloat(test.split(',').join(''));
}
var t1 = performance.now();
document.write('Split/join took: ' + (t1 - t0) + ' ms');

私が得た結果は次のとおりです(それぞれ100万ループの場合):

正規表現:263.335ミリ秒
分割/結合:1035.875ミリ秒

したがって、このシナリオでは正規表現が道であると言っても差し支えないと思います。

于 2016-02-22T21:36:04.583 に答える
0

@kennebecのアイデアに基づいて、コンマが正しいことを確認したい場合、およびコンマを置き換えたくない場合は、次のように試すことができます。

function myParse(num) {
  var n2 = num.split(",")
  out = 0
  for(var i = 0; i < n2.length; i++) {
    out *= 1000;
    out += parseFloat(n2[i])
  }
  return out
}
alert(myParse("1,432,85"));
// Returns 1432085, as the comma is misplaced.

それほど速くはないかもしれませんが、代替手段が必要でした:)

于 2010-07-08T18:36:28.500 に答える
0

一般的な問題のほとんどを解決するための単純な関数はどうですか?

function getValue(obj) {
  Value = parseFloat( $(obj).val().replace(/,/g,'') ).toFixed(2);
  return +Value;
}

上記の関数は、入力された値が数値であると想定して(jQueryを使用して)フィールドから値を取得します(ユーザーがデータを入力しているときにフィールドを検証するので、フィールドの内容が数値であることは確かです)。

浮動小数点値の場合、フィールドで適切にフォーマットされていれば、関数は浮動小数点値を正しく返します。

この関数は完全にはほど遠いですが、1,234.56または1,234,567として入力された値の「 」(コンマ)の問題をすばやく修正します。内容が数値である限り、有効な数値を返します。

returnコマンドの変数Valueの前にある+(プラス)記号は、JavaScriptで使用される「ダーティトリックあり返される変数の内容が数値になることを保証します。

関数を他の目的に変更するのは簡単です。たとえば、 " "(コンマ)の問題を処理して文字列を数値に変換します。

function parseValue(str) {
  Value = parseFloat( str.replace(/,/g,'') ).toFixed(2);
  return +Value;
}

両方の操作を1つの機能に組み合わせることができます。すなわち:

function parseNumber(item,isField=false) {
  Value = (isField) ? parseFloat( $(item).val().replace(/,/g,'') ).toFixed(2) : parseFloat( item.replace(/,/g,'') ).toFixed(2)
  return +Value;
}

このような場合、関数が呼び出された場合result = parseNumber( '12,092.98'); 文字列であるため、値を解析します。しかし、結果として呼び出された場合= parseNumber('#MyField'、true); '#MyField'から値を取得しようとします。

前にも言ったように、そのような機能は完全にはほど遠いものであり、さまざまな方法で拡張できます。1つのアイデアは、指定されたパラメーター(文字列)の最初の文字をチェックし、文字列形式に基づいて、解析する値を取得する場所を決定することです(最初の文字が= '#'の場合、それはDOMオブジェクトからのIDです。 、数字で始まる場合は、解析する文字列である必要があります)。

試してみてください...ハッピーコーディング。

于 2015-05-13T22:00:05.953 に答える