|
||||||||||||||||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||||||||||||||||
| 数値 | ||||||||||||||||||||||||||
|
コンピュータで計算される数値は正確で細かい数字をだしてくれますが、時として誤差を含んだり、意図しない数値に変換したりしてしまうことがあります。この点に留意してコーディングする必要があります。 |
||||||||||||||||||||||||||
| 誤差の無い計算をするときは、BigDecimalクラスを使う、数値の比較は精度に気をつける(C_NUM001、C_NUM002) | ||||||||||||||||||||||||||
|
浮動小数点演算を用いた計算結果や浮動小数点そのものには誤差が含まれています。 そのため、誤差が許されない正確な計算や比較を行う必要な場合は、BigDecimalクラスを使用してください。 BigDecimalクラスを使用すると、インスタンス生成時に指定された桁数の精度が保証され、正確な計算結果が得られます。 例えば、下記の計算を実行した場合、得られた結果は表3になります。 |
||||||||||||||||||||||||||
double d = 0.0;
|
||||||||||||||||||||||||||
表3:桁数の精度の結果
なお数値の比較を行う場合は、BigDecimalクラス以外のDoubleやFloatなどの浮動小数点のラッパークラスにあるequals()メソッドを使っても、正しい比較結果が得られます。 |
||||||||||||||||||||||||||
| 低精度なプリミティブ型にキャストしない(C_NUM003) | ||||||||||||||||||||||||||
|
プリミティブ型の変数を自身の型より低精度の型にキャストした場合、キャストした型の精度に値が更新されてしまいます。 |
||||||||||||||||||||||||||
double doubleType = 2.75;
|
||||||||||||||||||||||||||
|
上記のように、doubleをintにキャストした結果、intType変数の値は2になります。これより、計算によっては誤差が生じる可能性があることを覚えておいてください。 ちなみに、低精度なプリミティブ型に意図的にキャストすることもあります。 例としては、小数点以下の値を切り捨てる処理を、doubleを整数型のintやlongへのキャストで代用する場合などです。なお、意図的なキャストを使用すると可読性が低下しますので、他の人がコードを読んでも意図がわかるように、コメントを必ず書くようにしてください。 |
||||||||||||||||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||

