2009年12月30日

[Java] 固定小数点を扱う場合は BigDecimal

Java で $123.45 などというようにドル建ての金額などを扱う場合は固定小数点のデータ構造が必要になる。 そのような場合は java.math.BigDecimal を使えばよさそう。

BigDecimal はスケールなし整数値 (unscaledValue) と、小数点第何位までかを示す scale の整数であらわされる。 例えば 123.45 ならば unscaledValue = 12345, scale = 2 となる。

以下、テストコードとその実行結果をメモメモ

コード

package test;

import java.math.*;

public class BigIntegerTest {

	public static void main(String[] args) {
		BigDecimal num = new BigDecimal("2.35");
		printBigDecimalStructure(num);
		BigDecimal num2 = num.setScale(1, BigDecimal.ROUND_DOWN);
		printBigDecimalStructure(num2);
		BigDecimal num3 = num.setScale(0, BigDecimal.ROUND_DOWN);
		printBigDecimalStructure(num3);
		BigDecimal num4 = num.setScale(10, BigDecimal.ROUND_DOWN);
		printBigDecimalStructure(num4);
	}
	
	static void printBigDecimalStructure(BigDecimal bd) {
		System.out.println("<" + bd + ">");
		System.out.println("unscaledValue: " + bd.unscaledValue());
		System.out.println("scale:" + bd.scale());
		System.out.println();
	}

}

実行結果

<2.35>
unscaledValue: 235
scale:2

<2.3>
unscaledValue: 23
scale:1

<2>
unscaledValue: 2
scale:0

<2.3500000000>
unscaledValue: 23500000000
scale:10
posted by dev-man at 23:50| Comment(15) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする