« Windows10IMEで「⇩」が変換できない! | トップページ | ようやく我がNexus6にandroid7.1.1がやって来た! »

2017年8月 4日 (金)

浮動小数点計算の誤差

androidアプリ「時間電卓/TimeCalc」の計算精度がおかしい!
原因は浮動小数点は2進数に変換するわけであるが小数点以下の10進数を変換するときにに誤差が生じてしまうためのようだ。
こういう現象があるために正確な計算をするにはBigDecimalを使うのだそうだ!
BigDecimalは初めて使うので
1.BigDecimalの生成
BigDecimal one = new BigDecimal("1.00");
BigDecimal 型には、BigDecimal.ZERO や BigDecimal.ONE も用意されている
2.BigDecimalから変換
int num1 = big1.intValue();
long num2 = big2.longValue();
double num3 = big3.doubleValue();
String str = big4.toString();
3.BigDecimalへ変換
BigDecimal big = BigDecimal.valueOf(num);
4.BigDecimalの演算
BigDecimal add = big1.add(big2);
BigDecimal subtract = big1.subtract(big2);
BigDecimal multiply = big2.multiply(big3);
BigDecimal divide = big1.divide(big3, 2, BigDecimal.ROUND_HALF_UP);
除算は注意、赤字がないと割り切れないときにエラー発生
5.BigDecimalの比較
BigDecimal value = new BigDecimal("0.0");
if ( value.compareTo(BigDecimal.ZERO)==0 ) System.out.println("true");
if (three.compareTo(four) < 0) System.out.println("result1 : < ");
if (three.compareTo(three) == 0) System.out.println("result2 : = ");
if (four.compareTo(three) > 0) System.out.println("result3 : > ");
 

|

« Windows10IMEで「⇩」が変換できない! | トップページ | ようやく我がNexus6にandroid7.1.1がやって来た! »

Android」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112439/65618931

この記事へのトラックバック一覧です: 浮動小数点計算の誤差:

« Windows10IMEで「⇩」が変換できない! | トップページ | ようやく我がNexus6にandroid7.1.1がやって来た! »