Komma statt Punkt - NSString

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Komma statt Punkt - NSString

    Hallo, ich habe eine Frage.

    Ich habe ein Input (textField) dort gibt man einen Betrag mit Komma (Decimal Pad) ein. Nun gibt die App bei dem Gesamtbetrag mit einem Punkt aus. Das passt ja.
    Nur rechnet meine App nur bis zur Kommastelle. Die Nachkommastellen werden ignoriert. Wenn ich mein iPhone auf Englisch einstelle funktioniert es super mit dem Punkt.

    Beispiel - Englisch:

    Eingabe: 100.88
    Xcode rechnet: 100.88*10
    Ausgabe: 1008.8

    Beispiel Deutsch:

    Eingabe: 100,88
    Xcode rechnet: 100*10
    Ausgabe: 1000

    Ich benutze einen NSString für die Eingabe.
    NSString *eingabe = [_ersterbetrag text];

    Danach geht's weiter mit zwei floats.

    Die Ausgabe erfolgt mit einem NSString und initWithFormat




    Ich bedanke mich schonmal sehr für eure Hilfe.
    Grüße Stefan
  • Schonmal NSScanner mit Beachtung der lokale probiert?

    Quellcode

    1. float aFloat;
    2. NSScanner *theScanner = [NSScanner localizedScannerWithString:_textField.text];
    3. [theScanner scanFloat:&aFloat];
    4. NSLog(@"scanned: %f", aFloat);


    Gibt bei mir 3.456 ins Log, wenn ich 3,456 in das Textfeld eingebe.
  • smk schrieb:

    Schonmal NSScanner mit Beachtung der lokale probiert?

    Quellcode

    1. float aFloat;
    2. NSScanner *theScanner = [NSScanner localizedScannerWithString:_textField.text];
    3. [theScanner scanFloat:&aFloat];
    4. NSLog(@"scanned: %f", aFloat);


    Gibt bei mir 3.456 ins Log, wenn ich 3,456 in das Textfeld eingebe.


    Danke.
    Leider funktioniert dies bei mir nicht oder ich hab was falsches gemacht.


    Ich hab das so: (ohne dein Code)

    Quellcode

    1. NSString *eingabe = [_ersterbetrag text];
    2. float recht = [eingabe floatValue];
    3. float rechnung = recht*10;
    4. NSString *ausgabe = [NSString alloc] initWithFormat:@"%1.3f", rechnung];
    5. [_Gesamtbetrag setText: ausgabe];
    Grüße Stefan
  • Also das

    Quellcode

    1. NSString *eingabe = [_ersterbetrag text];
    2. NSLog(@"eingabe = %@", eingabe);
    3. NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    4. [formatter setLocale:[NSLocale currentLocale]];
    5. [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    6. NSNumber *number = [formatter numberFromString:eingabe];
    7. NSLog(@"number = %@", number);
    8. float recht = [number floatValue];
    9. NSLog(@"recht = %1.3f", recht);

    erzeugt bei mir im Simulator mit deutscher locale (Einstellungen -> Sprache und Region auf deutsch) und der Eingabe 3,141 folgende Ausgabe:

    Quellcode

    1. 2013-08-22 10:45:32.729 KommaTest[744:c07] eingabe = 3,141
    2. 2013-08-22 10:45:32.731 KommaTest[744:c07] number = 3.141
    3. 2013-08-22 10:45:32.731 KommaTest[744:c07] recht = 3.141

    Wenn ich den Simluator dann auf englisch umstelle und die Zahl mit Punkt eingebe, funktioniert auch alles

    Quellcode

    1. 2013-08-22 10:46:52.059 KommaTest[710:c07] eingabe = 3.141
    2. 2013-08-22 10:46:52.059 KommaTest[710:c07] number = 3.141
    3. 2013-08-22 10:46:52.060 KommaTest[710:c07] recht = 3.141


    Also wo ist jetzt genau das Problem?
  • smk schrieb:

    Also das

    Quellcode

    1. NSString *eingabe = [_ersterbetrag text];
    2. NSLog(@"eingabe = %@", eingabe);
    3. NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    4. [formatter setLocale:[NSLocale currentLocale]];
    5. [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    6. NSNumber *number = [formatter numberFromString:eingabe];
    7. NSLog(@"number = %@", number);
    8. float recht = [number floatValue];
    9. NSLog(@"recht = %1.3f", recht);

    erzeugt bei mir im Simulator mit deutscher locale (Einstellungen -> Sprache und Region auf deutsch) und der Eingabe 3,141 folgende Ausgabe:

    Quellcode

    1. 2013-08-22 10:45:32.729 KommaTest[744:c07] eingabe = 3,141
    2. 2013-08-22 10:45:32.731 KommaTest[744:c07] number = 3.141
    3. 2013-08-22 10:45:32.731 KommaTest[744:c07] recht = 3.141

    Wenn ich den Simluator dann auf englisch umstelle und die Zahl mit Punkt eingebe, funktioniert auch alles

    Quellcode

    1. 2013-08-22 10:46:52.059 KommaTest[710:c07] eingabe = 3.141
    2. 2013-08-22 10:46:52.059 KommaTest[710:c07] number = 3.141
    3. 2013-08-22 10:46:52.060 KommaTest[710:c07] recht = 3.141


    Also wo ist jetzt genau das Problem?



    Danke, du hast mein Problem gelöst. Tausenddank!
    Grüße Stefan