2016-05-19 16 views
3

Ich habe Code gesehen, der Lat mit dem folgenden NSNumberFormatter zu formatieren versucht.NSNumberFormatter formatiert nur bis zu 14 signifikante Ziffern

NSNumberFormatter * sut = [[NSNumberFormatter alloc] init]; 
[sut setMaximumFractionDigits:20]; // also tried set to 15 or 16, not working too. 
[sut setMaximumSignificantDigits:20]; 

NSLocale *enUSPOSIXLocale = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"]; 
[sut setLocale:enUSPOSIXLocale]; 

NSString *expected = @"1.299129258067496"; // 16 significants digits 
NSString *actual = [sut stringFromNumber:@(1.299129258067496)]; 

[[actual should] equal:expected];// Failed to pass, the actual is @"1.2991292580675" 

Obwohl in diesem Fall können wir nicht die NSNumberFormatter verwenden müssen, um das richtige Ergebnis zu bekommen, ich frage mich, warum NSNumberFormatter gibt nur Zeichenfolge von bis zu 14 signifikanten Stellen.

Antwort

1

Es zeigt nur 14 Dezimalstellen, da der doppelte Typ auf 15 Dezimalstellen rundet. Dies funktionierte für mich, weil Sie die Anzahl der angezeigten Dezimalstellen festlegen können.

[NSString stringWithFormat:@"%.20f", 1.299129258067496]

So stellen Sie sicher, dass die Anzahl der Dezimalstellen nicht übersteigt die Zahl sonst die Programmnummern, den Rest zu füllen macht. Hoffe das hilft.

+0

Welchen Wert sollte ich minimumSignificantDigits setzen? versuchte 1 oder 20, es funktioniert immer noch nicht. Im Fall von 1 gibt die stringFromNumber das gleiche Ergebnis wie in der Frage zurück, im Fall von 20 enthält das Ergebnis Füll-Nullen. Ich kann das MinimumSignificantDigits nicht auf 16 setzen, da es nur den Fall von 16 signifikanten Ziffern behandelt, während die tatsächlich zu formatierende Zahl unterschiedliche Länge haben kann. – Mingming

+0

Geben Sie den neuen Code einen Versuch. Entschuldigung wegen der Verwechslung –

+0

Ich schätze Ihre Hilfe. Aber die doppelte Art Runden bei 16 Dezimalstellen in meinem Test und Ihr Code oben wird in 1.29912925806749601776 führen. Ich verwende tatsächlich '[NSString stringWithFormat: @"% @ ", @ (1.29912925806749666666)]' in meinem Code, der 16 signifikante Ziffern gibt. Die Frage ist hier, nach dem Verhalten von NSNumberFormatter zu fragen. – Mingming