Jak wyodrębnić liczbę po kropce dziesiętnej za pomocą BigDecimal?Wyodrębnij liczbę dziesiętną w BigDecimal
BigDecimal d = BigDecimal.valueOf (1548.564);
wynik: jedynie wyciąg: 5649
Jak wyodrębnić liczbę po kropce dziesiętnej za pomocą BigDecimal?Wyodrębnij liczbę dziesiętną w BigDecimal
BigDecimal d = BigDecimal.valueOf (1548.564);
wynik: jedynie wyciąg: 5649
Spróbuj:
BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal result = d.subtract(d.setScale(0, RoundingMode.FLOOR)).movePointRight(d.scale());
System.out.println(result);
drukuje:
5649
Spróbuj BigDecimal.remainder:
BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal fraction = d.remainder(BigDecimal.ONE);
System.out.println(fraction);
// Outputs 0.5649
To powinno załatwić sprawę:
d.subtract(d.setScale(0, RoundingMode.FLOOR));
setScale()
zaokrągla numer zero miejsc po przecinku, a mimo jego nazwa nie zmienia wartości d
.
To jest praca ... dzięki :) – Mehdi
Nie powiem, jaki rodzaj chcesz wyniku. Najprostszym sposobem jest prawdopodobnie przekształcić BigDecimal na ciąg znaków, a także podejmować podciąg:
String s = d.toPlainString();
int i = s.indexOf('.');
if (i < 0) {
return "";
}
return s.substring(i + 1);
Działa to tylko dla lokalizacji, która używa. jako separator dziesiętny. Ale są Locale, które używają,. – BetaRide
@ BetaRide: Wiem o tym, mówię po francusku, i tutaj używany jest przecinek. Ale BigDecimal.toPlainString() nie jest locale-świadomy. Używa kropki jako separatora dziesiętnego niezależnie od lokalizacji. –
Jeśli wartość jest ujemna, przy użyciu d.subtract(d.setScale(0, RoundingMode.FLOOR))
zwróci nieprawidłowy dziesiętny.
Użyj tego:
BigInteger decimal =
d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
Zwraca 5649
dla 1548.5649
lub -1548.5649
Uwaga: Należy użyć 'BigDecimal.valueOf ("1548.5649");' zamiast ponieważ konwersja pomiędzy 'double' i 'BigDecimal' może powodować dziwne efekty uboczne. Jeśli potrzebujesz precyzji, unikaj 'double' i' float'. –
@AaronDigulla Myślę, że masz na myśli nowy BigDecimal ("1548.5649"), ponieważ nie ma metody BigDecimal.valueOf (String). –