Javaの科学的記数法



Java Scientific Notation



1科学的記数法の概念

1.1有効な数値

左側の0ではない最初の桁から正確な桁数までの概数では、中央のすべての桁がこの概算の有効桁と呼ばれます。
例えば:
890314000は、8.90×10の有効数字3桁を8乗(4ラウンド)保持します。
839960000は、8.40×10の8乗の有効数字3桁を保持します(5エントリ)
0.00934593は、9.35×10の有効数字3桁を-3の累乗で保持します。

1.2Eマーク

ほとんどの電卓とコンピュータプログラムは、科学的記数法で非常に大きな結果と非常に小さな結果を表示します。インデックスの上付き文字(たとえば、1011)は画面に表示するのに不便であるため、文字Eまたはeは通常10乗( 'x10b'と表記)を表すために使用され、Eまたはeの後の数字はそのインデックスです。つまり、任意の2つの実数aとb(bは整数である必要があります)の場合、「aEb」で表される値はa×10bです。この使用法の文字eは、数学定数eでも、指数関数exp()でもないことに注意してください(大文字のEを使用して、より大きな誤解を示します)。ただし、インデックスも意味します。この記号は通常、(Scientific表記)インデックスのベースシンボルではなく、Eまたはeシンボル(後者も表示されます)。公式出版物ではこの表示方法を使用しないようにしてください。
科学的記数法のeまたはEは、数学定数eまたは関数expとは関係がないことに注意してください。
このタイプの書き込みは、一部のコンピュータプログラムでの書き込みの不便が原因で発生しますが、公式の出版物では使用しないでください。
中国国家標準の科学的記数法は、aEbではなく×10bの形式で表されます(GB3101-1993、GBT15835-2011、GBT8170-2008を参照)。



2Javaの科学的記数法

Javaでは、Doubleの値が特定の条件を満たすと、科学的記数法で表示されます(以下は個人テストの結果であり、ドキュメントから得られた結論ではありません)。

@Test public void testPrintScientificNotation() { //When the number of digits in the integer is greater than or equal to 8, it starts to display in scientific notation. System.out.println(-12345678.0) System.out.println(12345678.0) //The integer bit is 0. When the decimal place starts to appear continuously at 0, it starts to show in scientific notation. System.out.println(0.0001) System.out.println(-0.0001) }

結果



-1.2345678E7 1.2345678E7 1.0E-4 -1.0E-4

多くの場合、すべて科学的記数法で、またはすべてを通常のカウントとして、ユニフォームを作成する必要があります。
インターネット上の情報によると、3つのAPI実装メソッド、NumberFormat、DecimalFormat、BigDecimalが主に言及されています。

2.1NumberFormat

NumberFormatは、すべての数値形式の抽象基本クラスです。

public static String scientificNotation2String(Double d, int newValue) { String value = null NumberFormat nf = NumberFormat.getInstance() // Set no grouping in this format nf.setGroupingUsed(false) // Set the maximum number of digits allowed in the fractional part of the number. nf.setMaximumFractionDigits(newValue) value = nf.format(d) return value }

入力した小数点以下の桁数が、設定した小数点以下の最大桁数よりも大きい場合、丸めが実行されます。



2.2DecimalFormat

DecimalFormatは、10進数のフォーマットに使用されるNumberFormatの具体的なサブクラスです。このクラス設計には、西洋、アラビア、ヒンディー語の数値のサポートなど、任意のロケールで数値を解析およびフォーマットできるようにするさまざまな機能があります。また、整数(123)、固定小数点数(123.4)、科学的記数法(1.23E4)、パーセンテージ(12%)、金額($ 123)など、さまざまな種類の数もサポートしています。このコンテンツはすべてローカライズできます。

public static String scientificNotation2String(Double d) { String value = null DecimalFormat decimalFormat = new DecimalFormat('0.00')//Formatting settings value = decimalFormat.format(d) return value }

テンプレートを設定して、小数用に予約する桁数を指定する必要があります。小数点以下の桁数が指定された桁数を超える場合、結果は四捨五入されます。小数点以下の桁数が指定した桁数より少ない場合は、ゼロパディングを設定できます。
値を科学的記数法に変換する必要があります。テンプレートを変更するだけで済みます。たとえば、テンプレートを次のように変更します。0。## E0

2.3 BigDecimal

BigDecimalは、不変の任意精度の符号付き10進数です。

public static String scientificNotation2String(String str) { String value = null BigDecimal bd = new BigDecimal(str) value = bd.toPlainString() return value }

BigDecimalには多くのコンストラクターがありますが、必ずしもString型の値を渡す必要はありません。
BigDecimalのtoStringメソッドとtoPlanStringメソッドの違い:

  • toString():指数が必要な場合は科学的記数法を使用して、このBigDecimalの文字列表現を返します
  • toPlainString():指数フィールドなしでこのBigDecimalの文字表現を返します

転載: https://www.cnblogs.com/zhanyao/p/6583207.html#%E7%A7%91%E5%AD%A6%E8%AE%A1%E6%95%B0%E6%B3%95%E7 %9A%84%E6%A6%82%E5%BF%B5