2017-02-06 8 views
0

DoubleにJava丸めなどがあるかどうかを確認する方法はありますか? -260.01079999999996DoubleにJavaの丸めがあるかどうかをチェックする方法?

計算されたDouble値を渡すシステムが1つあります。権利は-260.0108でなければなりません。

+1

なぜ迷惑でしょうか? 'BigDecimal'だけを使用して、それについて心配しないでください。 – TedTrippin

+2

通常、任意のイプシロン値と比較します。それを「丸めの問題」と呼んでも、誰も丸めをしていないし、誰もそれを求めていないので少し奇妙なようです。 –

+1

もしあなたがないとわからない限り、丸めの問題が起こる可能性が常にあるはずです。 –

答えて

0

浮動小数点型と倍精度型を使用する場合、丸めの「問題」はデジタルコンピュータの制限によるものです。

丸めをしたくない場合は、整数を使用してください。コンマの後に固定桁数で番号を保存する必要がある場合は、BigDecimalを使用します。コンマの後にX番目の桁でダブルを常に丸めます。数値を整数として使用してください。10^nで除算または掛け合わせてから表示してください(以下で詳しく説明します)。

例えば、-2600108を整数に、係数を1000として保存することができます。この場合、加算、減算、乗算、保存が完璧に、副作用なしに行えます。しかし、部門は倍増する必要がある。

0

外部の証拠から、コードの特定のポイントで正確な答えが整数でなければならないことが分かっている場合は、最も近い整数に丸めます。

それ以外の場合は、DecimalFormatを使用して意味のある数字だけを出力して、計算の精度を最大限引き上げることで、最も正確な結果を得ることができます。

"java rounding"に特別なことはありません。特別なことは、デフォルトの出力では、doubleを一意に識別するのに十分な数字が保持されることです。デフォルトでは、他の多くの言語が数字の数を減らして精度を失いますが、結果はより奇妙に見えます。

BigDecimalを使用することは、計算のすべての数値を小数点以下の小数で正確に表すことができる場合に大きな勝利です。それは通貨計算でよく起こります。しかし、1/3のような小数点以下の10進数では正確に表現できない小数点以下を打つとすぐに、丸め誤差に対処する必要があります。多くの財務計算では、丸めの固定ルールがあります。

理論的には、BigDecimalを使用して余分な精度を得ることもできますが、実用的ではありません。

関連する問題