13

通貨の入力があり、有効数字のみを返す必要があります。入力には常に小数点以下 2 桁があるため、次のようになります。

4.00  ->  4
4.10  ->  4.1
4.01  ->  4.01

これが私が現在行っている方法です:

// chop off unnecessary decimals
if (val.charAt(val.length-1) == '0') { // xx.00
    val = val.substr(0, val.length-1);
}
if (val.charAt(val.length-1) == '0') { // xx.0
    val = val.substr(0, val.length-1);
}
if (val.charAt(val.length-1) == '.') { // xx.
    val = val.substr(0, val.length-1);
}

それは機能し、私が好きな特定の直接性を持っていますが、もっときれいな方法があるかもしれません.

ループを使用して 3 回実行することもできると思いますが、実際には、if ステートメントを条件付けするまでには、少なくとも同じくらい大きくなるようです。それ以外に、何かアイデアはありますか?それを行う正規表現の方法もあると思います....

4

7 に答える 7

15

あなたのコードは、「1000」のような数字のゼロも切り捨てます。より良い変形は、小数点以下のゼロのみを切り刻むことです。正規表現による基本的な置換は次のようになります。

str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros
str.replace(/\.$/, "");              // remove trailing dot
于 2009-06-18T21:59:19.737 に答える
15

parseFloat()がこれを行うと思います。

parseFloat(4.00) // 4
parseFloat(4.10) // 4.1
parseFloat(4.01) // 4.01
于 2009-06-18T21:54:56.890 に答える
4
string to string: parseFloat(value).toFixed(2);
string to number: +(parseFloat(value).toFixed(2))
number to number: Math.round(value*100)/100;
number to string: (Math.round(value*100)/100).toFixed(2);
于 2009-06-18T23:37:23.203 に答える
3

私はこれがあなたが望むものだと思います

    v = 33.404034
    v.toFixed(2) # v -> 33.40
    parseFloat(v.toFixed(2)) # 33.4

そしてあなたは持っています

    v = 33.00704034
    v.toFixed(2) # v -> 33.01
    parseFloat(v.toFixed(2)) # 33.01

    v = 33.00304034
    v.toFixed(2) # v -> 33.00
    parseFloat(v.toFixed(2)) # 33
于 2014-08-07T13:34:00.877 に答える
2

つまり、文字列から始めて、文字列の結果が必要ですよね?

val = "" + parseFloat(val);

それはうまくいくはずです。もっと簡潔に

val = "" + +val;

また

val = +val + "";

同様に機能しますが、その形式は理解するのが難しすぎます。

これらはどのように機能しますか?文字列を数値に変換してから文字列に戻します。これらを使いたくないかもしれませんが、JavaScript 変換がどのように機能するかを知っていると、思いついたものをデバッグするのに役立ちます。

于 2009-06-18T22:04:32.113 に答える
1
String(4) // "4"
String(4.1) // "4.1"
String(4.10) // "4.1"
String(4.01) // "4.01"

parseFloat は機能しますが、文字列にキャストし直す必要があります。

于 2009-06-18T21:58:48.940 に答える
0

私は今、そのような解決策を見つけようとしています。これが私がここに来た方法です。

アプリケーションに Number() 関数を使用しましたが、 parseFloat() と同じように動作しているようです

http://jsfiddle.net/4WN5y/

番号を確認する前にカンマとコンマを削除します。

 var valueAsNumber = Number( val.replace(/\,/g,'') );
于 2014-05-17T12:29:47.783 に答える