我有NSDictionary
,其中包含多个键/对值。其中一个包含double
值。
NSNumber *goalValue = [info objectForKey:@"goalValue"];
我放了断点,我发现goalValue
存储了我需要的正常值。
就在下面我将其转换为NSSting
,如
NSString *stringValue=[goalValue stringValue];
并且此stringValue
存储非常奇怪的值。
伙计们请帮助我。我完全不解,我做了护目镜,但没有任何改变。请帮我。提前谢谢。
答案 0 :(得分:4)
方法stringValue
会将NSNumber
转换为字符串,方法是将内容作为nil
内部调用descriptionWithLocale:
,然后此方法将调用initWithFormat:locale:
,< / p>
来自Apple文档,
要获取字符串表示形式,此方法将调用NSString的initWithFormat:locale:方法,根据创建NSNumber对象的类型提供格式:
因此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];