浮点问题

时间:2013-05-08 13:22:15

标签: ios objective-c floating-point

我已经拍摄了两个UITextFields&一个标签,用于获取插入文本字段中的浮点值的结果。这是我所做的代码。 这里的问题在我最初在float中获取textfields值时开始,它正在改变。

- (IBAction)btnCalculateAmountSelected:(id)sender
{
    NSLog(@"[_txtField1.text floatValue] is:--> %f ----- [_txtField2.text floatValue] is:--> %f",[_txtField1.text floatValue],[_txtField2.text floatValue]);

    float result = [_txtField1.text floatValue] - [_txtField2.text floatValue];
    NSLog(@"actual result is:--> %f",result);

    float truncatedFloat = truncf(result * 100) / 100.0;
    NSLog(@"truncatedFloat is:--> %f",truncatedFloat);

    _lblResult.text = [NSString stringWithFormat:@"%f", truncatedFloat];
    NSLog(@"_lblResult.text is:--> %@",_lblResult.text);
}

enter image description here

输出为: -

[_txtField1.text floatValue] is:--> 1234.123413 ----- [_txtField2.text floatValue] is:--> 1234.111084
actual result is:--> 0.012329
truncatedFloat is:--> 0.010000
_lblResult.text is:--> 0.010000

3 个答案:

答案 0 :(得分:2)

所以有两个回应:

1)浮点数的精度有限 - 如果你想要更高的精度,使用双精度浮点数。

2)如果您的问题是您正在处理货币,比如美元和美分,请保持您的价值为美分,当显示的美分为模数100且美元为美分/ 100时 - 您永远不会得到奇数值如果你这样做。

答案 1 :(得分:1)

使用double作为数据类型

像 double result = [_txtField1.text doubleValue] - [_txtField2.text doubleValue];

答案 2 :(得分:0)

请尝试使用此。您知道每个浮点变量在Dot之后返回6个值。所以请使用%。4f 而不是%f

NSLog(@"[_txtField1.text floatValue] is:--> %.4f ----- [_txtField2.text floatValue] is:--> %.4f",[_txtField1.text floatValue],[_txtField2.text floatValue]);

输出:

[_ txtField1.text floatValue]是: - > 1234.1234 ----- [_txtField2.text floatValue]是: - > 1234.1111

我希望你得到答案。