Beschränken Sie ein Double auf zwei Dezimalstellen [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Jay

Wie erreiche ich die folgende Konvertierung von Double in eine Zeichenfolge:

1.4324 => "1.43"
9.4000 => "9.4"
43.000 => "43"

dh ich möchte auf Dezimalstellen runden, möchte aber keine nachgestellten Nullen, dh ich möchte nicht

9.4 => "9.40" (wrong)
43.000 => "43.00" (wrong)

Dieser Code, den ich jetzt habe, funktioniert also nicht, da er überschüssige Nullen anzeigt:

[NSString stringWithFormat: @"%.2f", total]

  • Dies ist kein Duplikat von stackoverflow.com/questions/4985791/… daher denke ich, dass es nicht als Duplikat markiert werden sollte. Bei dieser Frage geht es darum, wie man auf a beschränkt maximal von zwei Dezimalstellen, während die andere Frage ist, wie man begrenzt stets zwei Dezimalstellen. Letzteres ist einfach und wurde bereits in der ursprünglichen Frage erwähnt.

    – Peter Theil

    27. Mai 2015 um 10:58 Uhr

  • Ja, es ist kein Duplikat. Jemand, der nur von seinen Mod-Kräften begeistert ist.

    – Jay

    27. Mai 2015 um 22:07 Uhr

Benutzer-Avatar
Shiva Krishna

Du hast einen einfachen Fehler gemacht. Das wird funktionieren:

[NSString stringWithFormat: @"%.2lf", total]

  • Es funktioniert, aber wie?

    – Benjamin

    27. Februar 2012 um 23:31 Uhr

Benutzer-Avatar
Peter Hosey

Verwenden NSNumberFormatter. Siehe die Programmierhandbuch zur Datenformatierung‘s Kapitel auf Zahlenformatierer.

Benutzer-Avatar
paxdiablo

Der einfachste Weg ist wahrscheinlich, Ihre eigenen zu rollen. Ich musste dies zuvor in C tun, da es keine Möglichkeit gibt, das gewünschte Verhalten zu erzielen printf Formatierung.

Auch in Objective-C scheint es nicht viel einfacher zu sein. Ich würde das versuchen:

NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
while ([ftotal hasSuffix:@"0"]) {
    ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
if ([ftotal hasSuffix:@"."]) {
    ftotal = [ftotal subStringToIndex [ftotal length]-1];
}

oder diese (eventuell schnellere) Variante:

NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
if ([ftotal hasSuffix:@".00"]) {
    ftotal = [ftotal subStringToIndex [ftotal length]-3];
} else {
    if ([ftotal hasSuffix:@"0"]) {
        ftotal = [ftotal subStringToIndex [ftotal length]-1];
    }
}

Das stringWithFormat garantiert, dass es immer eine geben wird ".nn" am Ende (wo n ist ein Ziffernzeichen). Das while und if Entfernen Sie einfach nachgestellte Nullen und die nachgestellte Dezimalzahl, wenn es sich um eine ganze Zahl handelte.

Natürlich möchten Sie es vielleicht in eine Funktion oder Klasse packen, damit Sie von überall darauf zugreifen können, ohne den Code überall duplizieren zu müssen.

Benutzer-Avatar
John Carter

Ich bin mit Objective C nicht vertraut, aber dies ist mit der Standardformatierung im printf-Stil nicht möglich.

Die Verwendung von %g würde irgendwie funktionieren, aber für große oder kleine Zahlen würde es die wissenschaftliche Notation (zB 9.6e+6, 4.2e-7) anstelle der Dezimalnotation verwenden.

Die entsprechende Frage wurde hier für C/C++ gestellt, und in diesem Fall lautet die Antwort, %f zu verwenden und dann alle nachgestellten Nullen aus der Zeichenfolge zu entfernen. Nicht gerade elegant.

Da bin ich mir ziemlich sicher [[NSNumber numberWithFloat:f] stringValue]macht genau das, was Sie wollen.

1225560cookie-checkBeschränken Sie ein Double auf zwei Dezimalstellen [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy