-1
val = "2.";
var num = parseFloat(val).toFixed(2);

parseFloat を使用して、文字列を数値に変換しています。次に、toFixed(2) を使用して、小数点の後に 2 つのゼロが追加されるようにします。私の問題はval、コンマがある場合、これがすべて台無しになることです。

例:

val = "2,234.";
var num = parseFloat(val).toFixed(2);

出力は2.00です。

00を追加してコンマを置き換えないようにするにはどうすればよいですか?

Val は、混乱について申し訳ありませんが開始する文字列です。最終的に 2,234.00 を出力し、最初の val は 2.00 を出力するはずです

4

3 に答える 3

0

コードが実際に何であるかに応じて、2 つの理由が考えられますが、どちらも同じ結果になります。

コードが質問とまったく同じ場合、つまり:

val = 2,234.;

次に、2 つのオペランドを取り、両方を評価してから、2 番目のオペランドの値を返すコンマ演算子を使用しています。2変数への代入はval第 1 オペランドで、値234.は第 2 オペランドです。割り当てが234.行われ、評価され、コンマ演算子によって返され、破棄されます。コードは次のように評価されます。

(val = 2) , (234.);

文字列値の場合、つまり:

val = "2,234.";

その理由は、parseFloat関数は可能な限り文字のみを解析し、コンマは数値形式の一部ではないため、そこで停止して2.

編集:

文字列を解析するには、コンマを削除して解析し、コンマを元に戻す必要があります。

var s = parseFloat(val.replace(/,/g,'')).toFixed(2);
while (/\d{4}/.test(s)) {
  s = s.replace(/(\d{3}[,.])/,',$1');
}

デモ: http://jsfiddle.net/Guffa/KHjjh/

于 2013-05-01T19:40:11.643 に答える
0

これを回避する唯一の方法は、カンマを空の文字列に置き換えることだと思います。これはここで動作するはずです

 val = 2,234.;
 var num = parseFloat(val.replace(',', '')).toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");

val がすでに文字列である場合、これは jQuery を使用して行う最も簡潔な方法です。

于 2013-05-01T19:42:36.747 に答える
0

文字列を使用していると仮定します。

Guffa が説明したように、コンマに到達すると parseFloat は機能しません...したがって、それらを取り除きます...

var val = '2,234.';

val = val.replace(',', '') // remove commas

var num = parseFloat(val).toFixed(2); // 2234.00

ここで、カンマを元に戻す必要があります。スタックオーバーフローに関する別の回答のおかげで、次のようになりました。

// http://stackoverflow.com/questions/6392102/add-commas-to-javascript-output
var addCommas = function(nStr) {
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
      x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  return x1 + x2;
};

num = addCommas(num); // "2,234.00"
于 2013-05-01T19:49:15.680 に答える