[Seasar-user:3048] XlsReader などで BigDecimal を使う際の精度の問題
suga
ko.suga
2005年 12月 21日 (水) 10:52:04 JST
suga です。
S2Unit には Bean の値と Excel から読み込んだ値とを比較する便利な
機能がありますが、Bean の BigDecimal 型プロパティの場合に、
浮動小数点数の精度の関係で比較が失敗してしまいます。
# たとえば new BigDecimal("0.05") と 0.05d で発生します
一応、以下の対応で問題なく比較できるようになります。
対応をしていただければ助かります。
ひょっとすると setScale をする方が正しいのかもしれませんが、
その点は私ではわかりません。
org.seasar.extension.dataset.impl.XlsReader
public Object getValue(HSSFCell cell) {
(略)
case HSSFCell.CELL_TYPE_NUMERIC :
(略)
return new BigDecimal(
Double.toString(cell.getNumericCellValue()));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
org.seasar.framework.util.BigDecimalConversionUtil
public static BigDecimal toBigDecimal(Object o, String pattern) {
(略)
} else if (o instanceof Double) {
return new BigDecimal(((Double) o).toString());
^^^^^^^^
(略)
} else if (o instanceof Float) {
return new BigDecimal(((Float) o).toString());
^^^^^^^^
こういうのを作って XlsReader で使っても良いかもしれません。
public static BigDecimal toBigDecimal(double d) {
return toBigDecimal(Double.toString(d), null);
}
public static BigDecimal toBigDecimal(float f) {
return toBigDecimal(Float.toString(f), null);
}
--
suga ( ko.suga @ gmail.com )
Seasar-user メーリングリストの案内