Использует doubleValue() хороший способ?
Использование BigDecimal имеет смысл, если вы хотите избежать использования double
(или вы хотите контролировать, как форматируются ваши номера). Если вы смешиваете BigDecimal
и double
, я не вижу смысла. Вы также можете использовать double
все время и упростить свой код.
Если вы хотите повернуть значение в строку, используйте toString
, например.
BigDecimal bd = ...
System.out.println("bd: " + bd.toString());
или просто
System.out.println("bd: " + bd);
Если вы хотите использовать double
вы можете сделать
double d =
System.out.printf("%.2f%n", d); // round to 2 decimal places
пример того, почему BigDecimal могут быть более подвержены ошибкам, которые удваиваются. Оба эти ответы являются неправильными, но в случае BigDecimal
это не очевидно, либо в коде или результат, который выглядит отлично
System.out.println(BigDecimal.valueOf(1.00)
.divide(BigDecimal.valueOf(49), 2, BigDecimal.ROUND_HALF_UP)
.multiply(BigDecimal.valueOf(49)));
System.out.println(1.00/49 * 49);
печатает
0.98
0.9999999999999999
Вы можете исправить и код, но тот факт, проблема в первом случае легко пропущена. Подсказка: использование BigDecimal.valueOf
не является проблемой. Чем более подробный код (чем больше символов вы используете), тем сложнее увидеть важные детали.
Использование 'doubleValue()' определенно * не * хороший способ. Вы никогда не должны никогда больше использовать деньги с плавающей запятой. Вы должны использовать 'DecimalFormat' и друзей. – EJP