切り上げと切り下げを行う簡単なコードがいくつかありますが、予期しない結果が発生しています。
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
double a = 46.66;
System.out.println("Roundup: " + roundUp(a,2) + "\nRound Down: " + roundDown(a,2));
}
public static double roundUp(double a, int scale)
{
BigDecimal value = new BigDecimal(a);
value = value.setScale(scale, RoundingMode.UP);
return value.doubleValue();
}
public static double roundDown(double a, int scale)
{
BigDecimal value = new BigDecimal(a);
value = value.setScale(scale, RoundingMode.DOWN);
return value.doubleValue();
}
小数点以下3桁を使用すると、期待どおりに機能します。a = 44.661の場合、出力は次のようになります。
切り上げ:46.67切り下げ:46.66
a = 44.66の場合、切り捨て値は1減少しますが、これは以下のように予期しないことです。
切り上げ:46.66切り下げ:46.65
上記の結果を保持したまま、ラウンドダウンで44.66、ラウンドアップで44.67を取得するにはどうすればよいですか。
よろしくお願いします