Mam liczbę BigDecimal i biorę pod uwagę tylko 2 miejsca po przecinku, więc skracam ją za pomocą:
bd = bd.setScale(2, BigDecimal.ROUND_DOWN)
Teraz chcę wydrukować go jako ciąg, ale usuwając część dziesiętną, jeśli wynosi 0, na przykład:
1,00 -> 1
1,50 -> 1,5
1,99 -> 1,99
Próbowałem użyć programu Formatter, formatter.format, ale zawsze otrzymuję 2 cyfry dziesiętne.
Jak mogę to zrobić? Może pracujesz nad napisem z bd.toPlainString ()?
java
formatting
bigdecimal
res1
źródło
źródło
df.setMinimumFractionDigits(2)
działa dobrze bez setScale i setGrouping oraz setMaxFrac.NumberFormat numberFormat = NumberFormat.getPercentInstance();
następnienumberFormat.setMinimumFractionDigits(2);
następnieString percent = numberFormat.format(yourBigDecimal);
BigDecimal.ROUND_DOWN
nowsze są przestarzałe. UżyjRoundingMode.DOWN
zamiast tego.new DecimalFormat("#0.##").format(bd)
źródło
new DecimalFormat("0.00")
jeśli chcę mieć pewność, że dwa miejsca dziesiętne są zawsze wyświetlane, np.1000.5
Wyświetli się jako1000.50
.import java.math.BigDecimal; import java.text.*; public class LocalizeExample { public static void main(String[] args) { BigDecimal bd = new BigDecimal("123.10"); DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(Locale.GERMAN); decimalFormat.applyPattern("#0.00"); String result = decimalFormat.format(bd); System.out.println(result); } }
Poniższy kod może ci pomóc.
protected String getLocalizedBigDecimalValue(BigDecimal input, Locale locale) { final NumberFormat numberFormat = NumberFormat.getNumberInstance(locale); numberFormat.setGroupingUsed(true); numberFormat.setMaximumFractionDigits(2); numberFormat.setMinimumFractionDigits(2); return numberFormat.format(input); }
źródło
Użyj
stripTrailingZeros()
.Ten artykuł powinien ci pomóc.
źródło
Jeśli jego pieniądze, użyj:
źródło