PDA

View Full Version : [Java] Funzione Matematica


spv42
13-03-2007, 14:04
Salve,

Ho una Classe, che utilizzo per calcolare un prezzo scontato,

al costruttore gli passo 2 STringhe, rigorosamente numeriche, cioè controllo
a priori che i caratteri siano solo numeri.
Voglio che il risultato sia approssimato alla seconda cifra decimale.

Ho fatto questo:

public CalcolaPrezzo(String prezzolistino, String scontodapplicare) {
if (scontodapplicare.equals(""))
scontodapplicare = "0";
double prezzo = 0, sconto = 0, decimale = 0;
prezzo = new Double(prezzolistino).doubleValue();
sconto = new Double(scontodapplicare).doubleValue();
double ris = prezzo - (prezzo / 100) * sconto;
decimale = new Double(Math.round(100*(ris - new Double(ris).intValue()))).doubleValue() / 100;
risultato = String.valueOf(new Double(ris).shortValue() + decimale);
}


se passo i valori prezzolistino=2.16 e scontodaapplicare=15.0 ho un comportamento
strano
decimale=0.84 new Double(ris).shortValue()=1 ma la loro somma è 1.8399999999999999

Qualcuno sà dirmi come avere 1.84 come risultato?
:muro:

Grazie.

PGI-Bis
13-03-2007, 14:25
Per maneggiare marenghi usa BigDecimal. Consente, tra l'altro, di controllare precisione ed arrotondamenti. Ad esempio:

MathContext ctx = new MathContext(14);
BigDecimal prezzo = new BigDecimal(prezzoDiListino, ctx);
BigDecimal sconto = new BigDecimal(scontoDaApplicare, ctx);
BigDecimal cento = new BigDecimal("100", ctx);
BigDecimal risultato = prezzo.subtract(
prezzo.multiply(sconto).divide(cento));
risultato = risultato.setScale(2, ctx.getRoundingMode());
System.out.println(risultato);

spv42
13-03-2007, 14:53
Grande :ave:

Ti Ringrazio

PGI-Bis
13-03-2007, 14:58
Grande :ave:

L'inchino va rivolto ai capoccioni che hanno scritto le librerie standard della piattaforma Java. Inarrivabili.