Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271

    [java] numeri con la virgola

    nel database (oracle) ho un campo PREZZOVENDITA del tipo NUMBER(5,2)
    recupero questo prezzo da una tabella, facendo una query con select e poi:

    while (rs1.next())
    prezzo = rs1.getString("PREZZOVENDITA");

    e provo a metterlo in un'altra tabella con una insert, ma mi da errore proprio sul prezzo (java.sql.SQLException: ORA-01722: numero non valido). Inizialmente avevo provato dichiarando prezzo come float e recuperandolo con getFloat, non funzionava ed ho provato con int e getInt, non funzionava ancora e ho provato con String e getString ma niente ancora... come devo fare?

    sarebbe meglio se si potesse fare recuperandolo non come stringa, in modo da poterci fare alcune operazioni sopra (tipo sconto, etc.)

  2. #2
    Se posso darti un consiglio usa la classe BigDecimal che supporta sia i numeri molto grandi che quelli con la virgola ed è come il prezzemolo (va bene con tutto quando si tratta di importi).

    Puoi creare un BigDecimal facilmente partendo da un int, da un double, e perfino da una stringa.

    BigDecimal prova = new BigDecimal (<doubleValue o doubleVar>);
    BigDecimal prova2 = new BigDecimal (<intValue o intVar>);
    BigDecimal prova3 = new BigDecimal("0.0165"); // stringa indicante 0,0165

    Puoi definire il numero di cifre della parte decimale (dopo la virgola) che desideri usando il metodo setScale ed anche il tipo di arrotondamento:

    prova3 = prova3 .setScale(2, BigDecimal.ROUND_HALF_UP);

    In questo caso prova3 diventa 0.02.

    Se invece usi:

    BigDecimal prova3 = new BigDecimal("0.0165"); // stringa indicante 0,0165
    prova3 = prova3 .setScale(3, BigDecimal.ROUND_HALF_UP);

    allora prova3 diventa uguale a 0.017, cioè da [0 a 4] arrotonda per difetto da [5 a 9] per eccesso.

    Ci sono anche altri criteri di arrotondamento. Ti consiglio di guardare la documentazione

    Infine per scrivere su DB Oracle ad esempio è facilissim.
    Supponendo che hai una query parametrica (con i ?) e che il tuo PreparedStatemend si chiami ps, basta settare il parametro con l'istruzione:

    ps.setBigDecimal(<numeroParametro>, nomeVariabileBigDecimal);

    Ad esempio se il nostro sql parametrico è:

    String sql = "INSERT INTO TABELLAPREZZI (VALOREPREZZO) VALUES (?)"
    Connection con = getConnection();
    PreparedStatement ps = con.prepareattement(sql);
    ps.setBigDecimal(1, prova3);
    ps.executeUpdate();

    Spero di essere stato abbastanza chiaro.

    P.S:
    Dimenticavo se ti serve visualizzare il valore basta usare il metodo toString() (prova3.toString()).
    Inoltre la classe BigDecimal ha metosi per sottrarre, addizionare e moltiplicare valori.
    Vedi la documentazione online.

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.