带余数的小数点

时间:2015-01-05 19:07:20

标签: objective-c

我需要帮助我的计算器应用程序。我使用两个浮点变量,所以当我做一个运动账户时,例如6/2结果是3.000000(带小数点)而不是3,因为它是一个浮点变量。但是,如果我做2/6,结果是0.33333,如果有余数,我怎么能解决显示小数点的问题。

以下是代码:

//Add the number to UILabel
-(IBAction)numberPressed:(UIButton *)sender {

NSString *number = sender.currentTitle;
if (self.typingNumber) {
    self.firstLabel.text = [self.firstLabel.text stringByAppendingString:number];
}
else {

    self.firstLabel.text = number;
    self.typingNumber = YES;

   }

}

//Equal method
-(IBAction)equalPress:(id)sender {


self.typingNumber = NO;
self.secondNum = [self.firstLabel.text floatValue];
result = 0;

if ([self.operation isEqualToString:@"+"]) {
    result = self.firstNum + self.secondNum;
   }
if ([self.operation isEqualToString:@"-"]) {
    result = self.firstNum - self.secondNum;
   }
if ([self.operation isEqualToString:@"X"]) {
    result = self.firstNum * self.secondNum;
   }
if ([self.operation isEqualToString:@"/"]) {
    result = self.firstNum / self.secondNum;
   }

self.firstLabel.text = [NSString stringWithFormat:@"%f" ,result];

}

1 个答案:

答案 0 :(得分:1)

您可以尝试使用%g格式规范:

  

double参数应以f或e格式转换(或者在G转换说明符的情况下以F或E格式转换),精度指定有效位数。如果显式精度为零,则应将其视为1.使用的样式取决于转换的值;只有当这种转换产生的指数小于-4或大于或等于精度时,才应使用样式e(或E)。 应从结果的小数部分删除尾随零;基数字符只有在后跟数字或存在“#”标志时才会出现。

来自Apple使用的IEEE printf specification强调已添加。

例如:

float a = 6.0 / 2.0;
float b = 2.0 / 6.0;
NSLog(@"%f, %g | %f, %g", a, a, b, b);

产生

3.000000, 3 | 0.333333, 0.333333

要获得更多控制权,请使用NSNumberFormatter类,尤其要查看alwaysShowsDecimalSeparator等属性。

例如:

NSNumberFormatter *formatter = [NSNumberFormatter new];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.alwaysShowsDecimalSeparator = NO;

NSLog(@"%@ | %@", [formatter stringFromNumber:@(a)], [formatter stringFromNumber:@(b)]);

产生

3 | 0.333

(您可以使用其他属性来控制小数位数等。)