TOP設計・移行・活用> 数値
Javaコーディング規約
Javaコーディング規約

第8回:文字操作・数値・日付に関するコーディング規約
著者: 電通国際情報サービス
高安 厚思、東田 健宏、青木 応樹   2005/11/15
前のページ  1  2  3   4  次のページ
数値

   コンピュータで計算される数値は正確で細かい数字をだしてくれますが、時として誤差を含んだり、意図しない数値に変換したりしてしまうことがあります。この点に留意してコーディングする必要があります。
誤差の無い計算をするときは、BigDecimalクラスを使う、数値の比較は精度に気をつける(C_NUM001、C_NUM002)

   浮動小数点演算を用いた計算結果や浮動小数点そのものには誤差が含まれています。

   そのため、誤差が許されない正確な計算や比較を行う必要な場合は、BigDecimalクラスを使用してください。

   BigDecimalクラスを使用すると、インスタンス生成時に指定された桁数の精度が保証され、正確な計算結果が得られます。

   例えば、下記の計算を実行した場合、得られた結果は表3になります。

double d = 0.0;
BigDecimal b = new BigDecimal("0.0");

for (int i = 0; i > 100; i++) {
     d += 0.1;
     b = b.add(new BigDecimal("0.1"));
}
  • double型変数 d = 9.99999999999998
  • BigDecimal型変数 b = 10.0

表3:桁数の精度の結果

   なお数値の比較を行う場合は、BigDecimalクラス以外のDoubleやFloatなどの浮動小数点のラッパークラスにあるequals()メソッドを使っても、正しい比較結果が得られます。


低精度なプリミティブ型にキャストしない(C_NUM003)

   プリミティブ型の変数を自身の型より低精度の型にキャストした場合、キャストした型の精度に値が更新されてしまいます。

double doubleType = 2.75;
int intType = (int) doubleType; //intType = 2になる

   上記のように、doubleをintにキャストした結果、intType変数の値は2になります。これより、計算によっては誤差が生じる可能性があることを覚えておいてください。

   ちなみに、低精度なプリミティブ型に意図的にキャストすることもあります。

   例としては、小数点以下の値を切り捨てる処理を、doubleを整数型のintやlongへのキャストで代用する場合などです。なお、意図的なキャストを使用すると可読性が低下しますので、他の人がコードを読んでも意図がわかるように、コメントを必ず書くようにしてください。

前のページ  1  2  3   4  次のページ


株式会社電通国際情報サービス 開発技術センター 高安 厚思
著者プロフィール
株式会社電通国際情報サービス  高安 厚思
株式会社電通国際情報サービス 開発技術センター
Java(J2EE)/オブジェクト指向の研究開発やプロジェクト支援、開発コンサルティングに従事。モデル、アーキテクチャ、プロセスが探求対象。今回は Javaコーディング規約2004の仕掛け人。


株式会社電通国際情報サービス 開発技術センター 東田 健宏
著者プロフィール
株式会社電通国際情報サービス  東田 健宏
株式会社電通国際情報サービス 開発技術センター
CTI、Webアプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。


株式会社電通国際情報サービス 青木応樹
著者プロフィール
株式会社電通国際情報サービス  青木 応樹
株式会社電通国際情報サービス アウトソーシング事業部所属
主にJavaを用いたシステム開発に従事。最近は設計・マネジメントスキルの習得に励んでいます。


INDEX
第8回:文字操作・数値・日付に関するコーディング規約
  はじめに
  文字列リテラルはnewしない(C_STR002)
数値
  日付