Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Arrotondamento alla prima cifra decimale

    Salve a tutti,
    avrei bisogno di arrotondare, o troncare forse è il termine più esatto, un numero alla prima cifra decimale, ma essa deve avere solo valore 5 o 0. Mi spiego meglio: se ho ad esempio 4.134 diventerà 4.0 , se ho 4.456 o 4.52 diventarà 4.5 e se ho 4.89 sarà 5.0. Al momento questa procedura non mi serve per fare dei calcoli ma solo per poter essere usata con StringBuilder per crearmi il nome di un file, che va per step di 0.5.
    All'inizio avevo pensato a Math.round, ma arrotonda all'intero più vicino, poi ho trovato in rete qualcosa di questo tipo:

    codice:
    double b =(double)(Math.round(a*10)/10);
    ma ho il dubbio che se ho un numero tipo 4.56 me lo arrotondi a 4.6 anzichè a 4.5 come vorrei io.

    Qualcuno mi può illuminare? Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    Vedi poi la classe java.math.BigDecimal per altri funzionalità! Il metodo setScale fa tutto!!! Il primo parametro è un intero dove si deve specificare il numero di cifre dopo la virgola. Il secondo parametro indica il metodo di arrotondamento.

    codice:
    import java.math.BigDecimal; 
    public class MathRound { 
    public static void main(String[] args) { 
    double d = 123.3465677; 
    BigDecimal bg = new BigDecimal(d); 
    bg = bg.setScale(4, BigDecimal.ROUND_HALF_UP); 
    System.out.println (bg.doubleValue()); 
    } 
    }

  3. #3
    Grazie tanto per il suggerimneto, che potrebbe venirmi utile in seguito, ma che adesso nn mi è servito a molto. Infatti, come immaginavo, il numero nn diventa come voglio io.

    Avevo infatti 4.18 e me lo approssima a 4.2, che è matematicamente corretto ma io ho bisogno di 4.0., e poi avevo 4.39 che viene approssimato a 4.4 (corretto anche questo ovviamente) ma avrei bisogno di avere 4.5. Infatti nel nome dei file che mi ritrovo, come ho detto prima, vado per step di 0.5, quindi se quando costruisco la stringa mi compare 4.1 o 4.4 il mio programma nn trova il file. Se arrotondo alla solita maniera coi double, atterrò sempre 0.0 1.0 2.0 3.0 4.0 ecc, senza avere mai 0.5 1.5 2.5 ecc.
    Spero che il problema sia più chiaro adesso, non so bene come risolverlo...

  4. #4
    non ho capito BENISSIMO il problema ma provo a dare una risposta

    codice:
    double numero = 4.12;
    double test = ((int)numero) + 0.5;
    
    if(double > test) numero = test;
    else numero = (int)numero;
    www.gext.it

  5. #5
    Sei molto vicino alla soluzione ma magari va corretta un pochino. Infatti se scrivo 4.32 è molto più vicino a 4.5 che non a 4.0, ma col tuo metodo mi scrive 4.0. Idem se ho 4.92, che col tuo metodo diventa 4.5 anzichè 5.0 come dovrei avere io. E' più chiaro adesso il problema? Ho pure provato a sostituire il casting con math.round, ma è peggio...

  6. #6
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    devi solo strutturarlo un po' meglio:
    codice:
    double numero = 4.12; //numero di esempio
    final double soglia = 0.5;
    int parteIntera = (int) numero;
    double parteDecimale = numero - parteIntera;
    
    double scarto= soglia-parteDecimale;
    if(scarto >= 0) {
        if(parteDecimale < scarto) numero = parteIntera;
        else numero = parteIntera + soglia;
    } else {
        if(parteDecimale >= scarto+1) numero = parteIntera+1;
        else numero = parteIntera + soglia;
    }
    non l'ho testato, percio' non garantisco... cmq gli strumenti li hai tutti, basta pensare un minimo alla logica matematica da applicare

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    ma che intervalli vuoi??
    0 inferiore se arrivi fino a??
    5 da a ??
    0 superiore da??
    converti il numero a stringa, prendi la prima cifra dopo la virgola, controlli il suo valore, lo cambi poi ricomponi la stringa e la converti a double...

  8. #8
    Originariamente inviato da nether
    non l'ho testato, percio' non garantisco... cmq gli strumenti li hai tutti, basta pensare un minimo alla logica matematica da applicare
    Funziona benissimo, sei stato grandioso, era proprio quello che volevo dire io, grazie 1000!

    PS: Se qualche anima pia volesse rispondere anche all'altro mio post gliene sarei gratissima!!!

  9. #9
    Ops... ho guardato meglio per alcuni numeri... per valori negativi non va benissimo, tuttavia avrei solo il valore -0.5 da considerare...magari con calma lo sistemo, cmq grazie uguale perchè per tutto il resto va bene.

  10. #10
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    Puoi considerare tutti i numeri come positivi per "arrotondarli". Se un numero era negativo, ne tieni traccia e alla fine "neghi" il risultato che hai ottenuto.
    codice:
    double numero = 4.12; //numero di esempio
    
    boolean negativo = false;
    if(numero < 0) {
        numero *= -1;
        negativo = true;
    }
    
    final double soglia = 0.5;
    int parteIntera = (int) numero;
    double parteDecimale = numero - parteIntera;
    
    double scarto= soglia-parteDecimale;
    if(scarto >= 0) {
        if(parteDecimale < scarto) numero = parteIntera;
        else numero = parteIntera + soglia;
    } else {
        if(parteDecimale >= scarto+1) numero = parteIntera+1;
        else numero = parteIntera + soglia;
    }
    
    
    if(negativo) numero *= -1;
    

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.