将double转换为字符串会在目标c中返回奇怪的值

时间:2014-02-21 12:40:40

标签: ios objective-c ios7

我有NSDictionary,其中包含多个键/对值。其中一个包含double值。

NSNumber *goalValue = [info objectForKey:@"goalValue"];

我放了断点,我发现goalValue存储了我需要的正常值。 enter image description here

就在下面我将其转换为NSSting,如

NSString *stringValue=[goalValue stringValue];

并且此stringValue存储非常奇怪的值。

enter image description here

伙计们请帮助我。我完全不解,我做了护目镜,但没有任何改变。请帮我。提前谢谢。

3 个答案:

答案 0 :(得分:4)

方法stringValue会将NSNumber转换为字符串,方法是将内容作为nil内部调用descriptionWithLocale:,然后此方法将调用initWithFormat:locale:,< / p>

来自Apple文档,

  

要获取字符串表示形式,此方法将调用NSString的initWithFormat:locale:方法,根据创建NSNumber对象的类型提供格式:

enter image description here

因此double使用的格式说明符为%0.16g(即16位精度),因此值为98.09999999999999

我建议使用NSNumberFormatter

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2]; //2 decimal places, change this as required.
NSString *string = [numberFormatter stringFromNumber:goalValue];

希望有所帮助!

答案 1 :(得分:0)

为防止出现这种情况,我建议使用NSDecimalNumber(这也是我处理非常精确数量时的经验最佳格式)

NSDecimalNumber *doubleDecimal = [[NSDecimalNumber alloc] initWithDouble:[info objectForKey:@"goalValue"]];

对于两位数字格式,请使用numberFormatter

NSNumberFormatter * nf = [[NSNumberFormatter alloc] init];
 [nf setMinimumFractionDigits:2];
 [nf setMaximumFractionDigits:2];
NSString *stringValue  = [nf stringFromNumber:doubleDecimal]

答案 2 :(得分:-1)

它显示舍入值,因此您可以使用NSNumberFormatter将值四舍五入为单位数。

 NSNumberFormatter *fomatter = [[NSNumberFormatter alloc] init];
    [fomatter setMaximumSignificantDigits:2];

    NSString *stringValue=[fomatter stringFromNumber:goalValue];