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.
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
Geben Sie den neuen Code einen Versuch. Entschuldigung wegen der Verwechslung –
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