Utilizzo di Java BigDecimal per una cifra di precisione 15 (scala di 2)


Ho trovato una risposta parziale qui , ma lo sapevo già. Così ho deciso di pubblicare una nuova domanda.

Sto cercando di convertire una stringa di parametri di richiesta HTTP in un numero BigDecimal Java di precisione 15 (con ridimensionamento di 2). Ad esempio,

String x = request.getParameter("seqNo"); /* e.g. 12345678910111213141516.17181920 whatever */
// I want to convert x so that it has a precision of 15 and scale of 2 i.e. 111213141516.17.

Non mi interessa arrotondare. È una forma di numero di riferimento, quindi irrilevante dell'arrotondamento. So che il ridimensionamento può essere impostato utilizzando il metodo setScale(int) sovraccarico che restituirà un ridimensionamento(troncato?) Grande decimale. Ma come per assicurarsi che la precisione sia impostata correttamente?

Author: Community, 2015-04-30

1 answers

Che ne dici di usare invece la sottostringa? Non è proprio un numero comunque.

int pos = x.indexOf('.');
String y = x.substring(pos - 12, pos + 3);

Se sei abbastanza pazzo da provare a processarlo come numeri (collisioni e differenze nell'arrotondamento ti romperanno il collo prima o poi!), si potrebbe fare questo.

double v = Double.parseDouble(y); // REALLY REALLY REALLY NOT RECOMMENDED.

Ma questo è un molto molto cattiva idea. Non spremere qualcosa in una colonna numerica che è non un numero. La prossima settimana, si otterrà numeri con due punti, e si romperà in in ogni modo possibile.

Se non è necessario eseguire calcoli matematici, trattare un campo come VARCHAR o TEXT è perfettamente accettabile. Perché è quello che è: una sequenza di caratteri. Non un numero.

Infatti, consiglierei vivamente di memorizzare l'intero numero, come VARCHAR. È un identificatore univoco , non un numero matematico con cui eseguire calcoli.

 1
Author: Has QUIT--Anony-Mousse, 2015-04-30 15:26:51