Получение дробной части десятичного числа из ввода BigDecimal - PullRequest
2 голосов
/ 18 октября 2019

Я пытаюсь использовать BigDecimal, чтобы разделить десятичное число на две части (целую часть и дробную часть).

BigDecimal price1  = BigDecimal.valueOf(300.50);
BigDecimal price2  = BigDecimal.valueOf(300.05);
BigDecimal fractionalPart1  = price1.remainder(BigDecimal.ONE);
BigDecimal fractionalPart2  = price2.remainder(BigDecimal.ONE);
System.out.println(fractionalPart1.movePointRight(price1.scale()).abs().intValue());  // Output is 5
System.out.println(fractionalPart2.movePointRight(price2.scale()).abs().intValue());  // Output is 5

Вывод в обоих вышеупомянутых случаях равен 5. Как исправить это (оставив возможность конвертировать его в строку), чтобы он правильно выдал 50 и 5.

1 Ответ

3 голосов
/ 18 октября 2019

Хорошо, вот решение.

При использовании valueOf и указании двойного значения конечный ноль сбрасывается. И это влияет на масштаб. Если вы хотите сохранить конечный ноль, то вам нужно использовать версию String конструктора BigDecimal.

Так что измените эти

      BigDecimal price1 = BigDecimal.valueOf(300.50);
      BigDecimal price2 = BigDecimal.valueOf(300.05);

на эти

      BigDecimal price1 = new BigDecimal("300.50");
      BigDecimal price2 = new BigDecimal("300.05");
...