Come estrarre un numero dopo il punto decimale utilizzando BigDecimal?Numero decimale estratto in BigDecimal
BigDecimal d = BigDecimal.valueOf (1548.5649);
risultato: estratto solo: 5649
Come estrarre un numero dopo il punto decimale utilizzando BigDecimal?Numero decimale estratto in BigDecimal
BigDecimal d = BigDecimal.valueOf (1548.5649);
risultato: estratto solo: 5649
provare:
BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal result = d.subtract(d.setScale(0, RoundingMode.FLOOR)).movePointRight(d.scale());
System.out.println(result);
stampe:
5649
Prova BigDecimal.remainder:
BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal fraction = d.remainder(BigDecimal.ONE);
System.out.println(fraction);
// Outputs 0.5649
Questo dovrebbe fare il trucco:
d.subtract(d.setScale(0, RoundingMode.FLOOR));
setScale()
arrotonda il numero a zero cifre decimali, e nonostante il suo nome non muta il valore di d
.
È lavoro ... grazie :) – Mehdi
tenta di utilizzare d.doubleValue()
per ottenere il valore doppio
restituisce lo stesso numero: 1548.5649 – Mehdi
Non dire quale tipo si desidera come un risultato. Il modo più semplice è probabilmente quello di trasformare il BigDecimal in una stringa, e prendere una stringa:
String s = d.toPlainString();
int i = s.indexOf('.');
if (i < 0) {
return "";
}
return s.substring(i + 1);
Funziona solo per un Locale che utilizza. come separatore decimale. Ma ci sono localizzazioni che stanno usando,. – BetaRide
@BetaRide: lo so, parlo francese e qui viene usata la virgola. Ma BigDecimal.toPlainString() non è consapevole delle impostazioni internazionali. Usa il punto come separatore decimale qualunque sia la localizzazione. –
Se il valore è negativo, utilizzando d.subtract(d.setScale(0, RoundingMode.FLOOR))
restituirà un decimale errato.
Utilizzare questa:
BigInteger decimal =
d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
Esso restituisce 5649
per 1548.5649
o -1548.5649
Nota: Si dovrebbe usare 'BigDecimal.valueOf ("1548,5649");', invece, perché la conversione tra 'double' e 'BigDecimal' può causare strani effetti collaterali. Se hai bisogno di precisione, evita 'double' e' float'. –
@AaronDigulla Penso che tu intenda il nuovo BigDecimal ("1548.5649") perché non esiste un metodo BigDecimal.valueOf (String). –