float 型と double 型は主に科学計算と工学計算用に設計されており、2 進浮動小数点演算を実行し、広範囲の値に対してより正確な近似計算を提供するように慎重に設計されています。ただし、完全に正確な結果が得られるわけではないため、正確な結果が必要な場合には使用しないでください。通常、ビジネス計算では、高精度要件で値を計算するために BigDecimal が必要になることがよくあります。たとえば、
0.07 + 0.020.58 - 0.421.005 * 10015.1 / 1000
どのような環境であっても、浮動小数点数を直接出力する場合、コードをバイナリマシンコードに変換して機械が認識できるようにする必要があります。浮動小数点数を処理する場合、計算後に精度が失われる可能性があり、その場合は計算に BigDecimal が必要になります。
1. BigDecimal を作成します
BigDecimal には、倍精度浮動小数点数をパラメータとして受け取るコンストラクターがありますが、実際には、浮動小数点数を計算に渡すと、精度が失われます。ただし、文字列を渡すと正確な結果が得られることがわかります。また、BigDecimal.valueOf(double val を使用しても正確な結果が得られます) BigDecimal.valueOf(double val) のソースコードは以下の通りです
= BigDecimal(1.005= BigDecimal(100= BigDecimal("1.005"= BigDecimal("100"100.49999999999998934185896359849721193313598632812500 100.500
このメソッドは、まずパラメーターを String 型に変換し、次に String 型のパラメーターを持つ構築パラメーターを呼び出します。そのため、BigDecimal を使用する場合、正確な結果を保証するには、新しい BigDecimal(String val) または BigDecimal.valueof(double val) を使用してみてください
。2.compareTo
BigDecimal のサイズを比較するには、compareTo() を使用します。
public static BigDecimal valueOf(double val) {// Reminder: a zero double returns '0.0', so we cannot fastpath// to use the constant ZERO. This might be important enough to// justify a factory approach, a cache, or a few private// constants, later.return new BigDecimal(Double.toString(val)); }
BigDecimal.compareTo(BigDecimal val) BigDecimal が val より大きい場合は 1 を返し、 BigDecimal が val より小さい場合は -1 を返します。 BigDecimal が次と等しい場合値 0 。
以上がBigDecimal とは何ですか? BigDecimal のインスタンスを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。