【问题标题】:I want same value after converting in to double from NSString iOS [duplicate]从 NSString iOS 转换为 double 后,我想要相同的值 [重复]
【发布时间】:2016-02-02 10:08:44
【问题描述】:

转换成双精度后我的 NSString 值为 28.4701278 我想要与 28.4701278 相同的值

【问题讨论】:

  • 那你得到了什么?你尝试了什么?
  • 转换成双精度后,我希望双精度值与 28.4701278 相同
  • 只是浮点舍入误差。

标签: ios objective-c


【解决方案1】:

IEEE 754 浮点数(在double 中使用)不能准确地表示每一个十进制数。见:Why don’t my numbers, like 0.1 + 0.2 add up to a nice round 0.3, and instead I get a weird result like 0.30000000000000004?

如果不能接受重要性损失,请使用NSDecimalNumber 而不是double

【讨论】:

  • 这是正确答案。
【解决方案2】:
NSString *stringValue = @"28.4701278";
double doubleValue = [stringValue doubleValue];

【讨论】:

  • NSString *stringValue = @"28.4701273"; double doubleValue = [stringValue doubleValue];输出将是:28.470127300000001
  • 不一样的 28.4701273
  • 在我的情况下输出与上面相同...可以在您使用它的地方分享您的代码吗?
  • 请出示您的输出控制台。
  • 我认为您在执行一些数学运算时只需要双数据结构,因为 28.470127300000001 几乎等于 28.4701273。如果你想在任何地方显示它,你可以再次将它转换为字符串,它将是 28.4701273。对于从双精度到字符串的转换,您可以使用 NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; [fmt setPositiveFormat:@"0.#######"]; NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithDouble:doubleValue]]);
【解决方案3】:

试试这个:

var string = "28.4701278"
var a = Double(string)

【讨论】:

    【解决方案4】:

    简单的尝试

    double finalValue = [@"28.4701278" doubleValue];
    NSLog(@"final value ==%f",finalValue);
    

    你会得到类似的输出

    更新

     double finalValue = [@"28.4701273" doubleValue];
     NSLog(@"final value ==%f",finalValue);
    

    我得到像这样的输出

    编辑

    使用NSDecimalNumber 而不是double

     NSDecimalNumber *decimalNum= [NSDecimalNumber decimalNumberWithString:@"28.4701273"];
    NSLog(@"final  ==%@",decimalNum);
    

    输出是

    【讨论】:

    • 使用 @"28.4701273" 而不是 @"28.4701278"
    • 您的输出中缺少 bro 3。
    • @SalmanAli -- 检查 Edit 答案兄弟..
    • 这是对象类型而不是双精度数据类型。
    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2015-10-22
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多