NSString到双重问题

Stu*_*ing 6 iphone xcode objective-c

可能真的很简单,但我不明白......我有一个NSString 50.81114,我想把它转换为双...
当前我正在使用[string doubleValue]但是这是出现了50.811140000002
什么发生了什么?!

迪斯科

Mat*_*uch 11

由于精度有限double无法存储50.81114.可以存储在double中的最接近的值是50.811140000002.

请改用NSDecimalNumber.像这样:

NSString *string = @"50.81114";
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:string];
Run Code Online (Sandbox Code Playgroud)


zw3*_*324 2

Double(以及任何浮点数)都有其自身的精度限制,通常约为 15-16 位数字。请注意,这不仅适用于 Objective-C,而且适用于所有语言,因为二进制浮点表示的限制。

您显示的只是正常的,因为50.81114无法准确地以二进制表示,所以必须使用近似值。

您可以阅读维基百科以进一步阅读。