我找到了答案但找不到答案。我正在开发一个使用利率的iOS 7应用程序。我已声明如下:
double InterestRate;
InterestRate = 3.9;
我将按钮标签设置为打印兴趣3.9%并且工作正常:
[btnInterest setTitle:[NSString stringWithFormat:@"Interest %.2f%%",InterestRate] forState:UIControlStateNormal];
然后当有人点击按钮时,我会将其发送到我的PopOver窗口,如下所示:
if ([[segue identifier] isEqualToString:@"InterestController"])
{
CC_InterestViewController *vc = [segue destinationViewController];
vc.delegate = self;
[vc setInterestRate:InterestRate]; <---- BREAKPOINT HERE!!!!! (See Below)
}
我的PopOver收到的是这样的:
-(void)setInterestRate:(double)rate
{
interestRate = rate;
}
然后我将3.9拉入不同的部分,因此我可以使用两列将它们分成UIPickerview来选择利率。唯一的问题是我得到:
3.89%不是3.9%
所以,我在Segue中向PopOver发送InterestRate的时候设置了断点,我发现iOS将3.9报告为3.8999999999999。
我特意将它设置为3.9。有没有更好的方法呢?我发现基本上如果我将设置设置为3.9,那么它将被iOS报告为3.8999999999999。
任何想法?
-UPDATE:
好的,这被标记为重复。但是,我不是使用浮动,而是使用浮动。不确定它是否有很大的不同,但似乎并不是一个答案。如果我声明double = 3.9,那么我看它所说的值是3.89999999999999。这绝对不一样。所以,我的基本问题是处理这个问题的最佳方法是什么?我需要3.9总是等于3.9,而不是3.89999999999999。如果这是一个重复的问题,为什么链接不会给出如何处理它的简单直接答案,而是对问题的长期解释。我知道有问题。我正在寻找答案。
答案 0 :(得分:1)
它与double
s(即浮点数)的存储方式有关(有关详细信息,请参阅this问题。)。
如果您想要准确的结果,请使用NSDecimalNumber
。执行arithmetic有基本方法(加,减,乘,除)。
NSDecimalNumber *interestRate = [NSDecimalNumber decimalNumberWithMantissa:39 exponent:-1 isNegative:NO];
要将NSDecmialNumber
显示为字符串,请使用NSNumberFormatter
。