Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [objective-c] String to double/Float

    Salve a tutti, ho un problema su dei numeri.
    Faccio una query sul db e recupero dei float dalla tabella che mi interessa.
    Li passo dove mi servono in questo modo:

    codice:
    NSMutableDictionary *dictionary;
    dictionary = [[NSMutableDictionary alloc] initWithObjectsAndKeys:costo_1,@"costo_1",costo_2,@"costo_2", nil];
    [listaTemp addObject:dictionary];
    [dictionary release];
    Nella vista dove devo andare a fare i calcoli mi richiamo il metodo, recupero l'array e stampo

    codice:
    NSString *costo = [dictionary objectForKey:@"costo_1"];
    double c_1 = [costo doubleValue];
    NSLog(@"COSTO_1 DA DB______%f", c_1);
    La query mi recupera correttamente il valore e stampandolo ad esempio è 3.5

    Invece quando stampo c_1 mi da 0,00000
    Purtroppo questi valori mi servono per poter fare un calcolo.
    Dove sbaglio?
    Qualcuno mi da una mano?
    Grazie

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    La query mi recupera correttamente il valore e stampandolo ad esempio è 3.5
    Di che valore parli (intendo il nome della variabile)?
    Se doubleValue invocato su costo restituisce 0.0 significa che non contiene un double.Prova a stampare costo e dimmi qual'è l' output.
    Poi se fai vedere il programma completo è meglio.

  3. #3
    Ciao e grazie per la risposta.

    Allora il valore è il valore del campo e se lo stampo come stringa dopo recuperato mi stampa 3,50.

    Se lo stampo come stringa dopo passato alla vista mi stampa sempre 3,50.

    Il problema è quando lo converto in double.

    Penso che il codice che ho postato basti a capire comunque qui c'è il resto del codice



    codice:
                
    while ( sqlite3_step(selectstm) == SQLITE_ROW) {                 
       costo_singolo_capo = [NSString stringWithUTF8String:(char *) sqlite3_column_text(selectstm, 0)];                 
       costo_capo_multiplo = [NSString stringWithUTF8String:(char *) sqlite3_column_text(selectstm, 1)];                 
       tipo_capo = [NSString stringWithUTF8String:(char *) sqlite3_column_text(selectstm, 2)];                 
       dictionary = [[NSMutableDictionary alloc] initWithObjectsAndKeys:costo_singolo_capo, @"costo_singolo_capo", costo_capo_multiplo, @"costo_capo_multiplo", tipo_capo, @"tipo_capo", nil];
       [listaTemp addObject:dictionary];                
       [dictionary release];
    Quindi facendo la query come dicevo prima recupero i campi dal db. i primi due sono prezzi e quindi float/double con precisione doppia.
    Invece il terzo stringa.

    Adesso passo questi valori alla vista dove effettuo i calcoli e li prelevo facendo:

    codice:
    // qui c'è la chiamata al metodo che poi mi restituisce l'array di cui sotto....
    
        NSMutableDictionary *dictionary = [data objectAtIndex:0];
        NSString *tipoCapo  = [tariffadictionary objectForKey:@"tipo_capo"]];
        NSString *capoSingolo  = [tariffadictionary objectForKey:@"costo_singolo_capo"]];
        NSString *capoMulti  = [tariffadictionary objectForKey:@"costo_capo_multiplo"]];
    Logicamente se stampo il costo qui essendo una stringa me lo stampa correttamente.
    Invece se adesso converto la stringa in float con questa istruzione:

    codice:
    float c1 = [capoSingolo floatValue];
    float c2 = [capoMulti floatValue];
    Se stampo i due float mi vengono 0,000000

    Spero di essermi spiegato meglio

    Fank

  4. #4
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Prova a convertirla senza il metodo doubleValue ne floatValue:

    codice:
    char* str=[costo UTF8String];
    NSLog(@"%f",atof(str) );
    Cosa ti stampa?

  5. #5
    Mmmm, bisogna capire se la conversione viene localizzata (separatore decimale ,) oppure no (separatore decimale .).
    ...

  6. #6
    Originariamente inviato da Who am I
    Prova a convertirla senza il metodo doubleValue ne floatValue:

    codice:
    char* str=[costo UTF8String];
    NSLog(@"%f",atof(str) );
    Cosa ti stampa?

    Allora vi scrivo qui la stampa sia delle stringhe sia col metodo propostomi.

    COSTO1 STRINGA_________ 0,05
    COSTO2 STRINGA________4,50

    Valori Stampati come indicatomi da te sopra.

    COSTO 1 Non stringa________0.000000
    COSTO 2 Non stringa________4.000000


    Nel DB il valore è scritto con la virgola tipo 4,50

    PS il risultato della stampa è lo stesso che ottengo io anche forzando il valore come float o come double.

    Grazie per l'aiuto
    Frank

  7. #7
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Allora è proprio come diceva Caiodark, devi sostituire la virgola col punto:

    codice:
    NSString *costo = [dictionary objectForKey:@"costo_1"];
    NSString* temp;
    temp=[costo stringByReplacingOccurrencesOfString:@"," withString:@"." options:0 range: NSMakeRange(0, [costo length])];
    double c_1 = [temp doubleValue];
    NSLog(@"%f",c_1);

  8. #8
    Ok sembra funzionare bene
    Ho fatto anche un'operazione e sembra tutto ok.
    Qual'è il problema? Il valore del database?
    Grazie per l'aiuto

  9. #9
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Evidentemente il database memorizza il valore utilizzando il formato con la virgola.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.