59

文字列がありe.g: "4.874915326E7"ます。それをjavascriptの数値形式に変換する最良の方法は何ですか?(intまたはfloat)?parseInt()を試してみると、最後のEは無視されます。

4

6 に答える 6

87

編集:

この答えは混乱を引き起こしているようです。元々の質問は、文字列形式の科学的記数法を数値に変換する方法を尋ねていました(計算に使用できるようにするため)。ただし、この答えを見つけたかなりの数の人々は、JavaScriptによって科学的記数法として表されている数値をより見やすい形式に変換することについて考えているようです。それが実際にあなたの目標(プレゼンテーション)である場合は、代わりに数値を文字列に変換する必要があります。これは、計算で簡単に使用できないことを意味することに注意してください。

元の回答:

それを文字列としてNumber関数に渡します。

Number("4.874915326E7") // returns 48749153.26
Number("4E27") // returns 4e+27

科学的記数法の数値を文字列に変換する:

これは別の質問で最もよく答えられますが、その質問から私は個人的にを使用するソリューションが.toLocaleString()好きです。特定のソリューションは負の数では機能しないことに注意してください。あなたの便宜のために、ここに例があります:

(4e+27).toLocaleString('fullwide', {useGrouping:false}) // returns "4000000000000000000000000000"
于 2012-06-08T06:29:45.103 に答える
11

このようなことを試してください

デモ

Number("4.874915326E7").toPrecision()
于 2012-06-08T06:36:34.123 に答える
1

前文

他の答えは十分で正しいですが、文字列から数値を正しく解析できるようにするには、少なくとも高レベルで型強制 (あなたの場合は変換) がどのように機能するかを理解することが役立ちます。

強制ルール

parseIntparseFloatNumberコンストラクター、+単項演算子などのユーティリティを呼び出すときに変換がどのように実行されるかを定義するルールがあります。

parseInt(<value>, [radix])関数:

  • 先頭の空白を無視します ( " 24"-> 24)
  • 空の文字列を返すNaN
  • 最初の非数値文字は解析を終了します ( " 42answer"-> 42)
  • 上記のルールの下で、小数点以下の桁数も解析を終了します

3 番目のルールは、指数部 (ExponentPartで構成ExponentIndicatorされ、 standardSignedIntegerで定義されている) が無視される理由です。文字が検出されるとすぐに、解析が停止し、関数はそれまでに解析された数値を返します。実際には、小数点が最初に検出されたときに停止します (最後の規則を参照)。e

parseFloat()は と同じですがparseInt、次の点が異なります。

  • 最初の小数点を解析します
  • 先頭を無視し0ます (したがって、16 進数は解析できません)

経験則として、parseInt「integer」と「float」に変換するときに使用する必要がありますparseFloat(これらは実際には同じ型であることに注意してください)。

Number()コンストラクターと単項+:

  • ブール値の場合 -> trueto 1falseto0

  • For null-> 0(null偽なので)

  • のためにundefined- >NaN

  • 数値の場合: パススルー

  • 文字列の場合:

    • +数字の [0-9] 文字のみ、数字またはor --> 数字 (整数)で始まる
    • 同じですが、浮動小数点が含まれています -> 数値 (浮動小数点)
    • 16 進数を含む -> 数値 (整数)
    • 空文字列 ->0
    • その他すべてのケース ->NaN
  • オブジェクトの場合、そのvalueOf()メソッドが呼び出されます。結果がNaNの場合、toString()メソッドが呼び出されます。内部では、オブジェクトはプリミティブに変換され、そのプリミティブは数値に変換されます。

  • シンボルと BigInts の場合 ->TypeErrorがスローされます

数値形式に関する注意

質問は依然としてフォーマットに関係する回答とコメントを引き付けているため(受け入れられた回答で有効に述べられているように)、次のように述べる必要があります。

プログラミングに適用されるように、 「数値形式」には厳密な意味があります:
数値の表現

「変換」には、型変換としての厳密な意味もあります(標準を参照)

ECMAScript は倍精度の 64 ビット形式を実装しており、これが唯一の "形式" です。この質問は、文字列を数値形式に変換することについて尋ねているため、回答は次の情報を提供することが期待されています。

値が e-notation の数値を表す場合に、文字列を数値に変換する方法

参考文献

  1. ToNumber ECMAScript 標準の抽象操作
  2. このトピックや他の多くのトピックに関する最高の読み物の 1 つ: Matt Frisbie の「Professional Javascript for Web Developers」。
  3. 型強制の説明 (ブログ投稿)
于 2020-05-20T02:17:56.550 に答える