gpt4 book ai didi

iphone - 更正 float

转载 作者:可可西里 更新时间:2023-11-01 03:42:31 26 4
gpt4 key购买 nike

我想知道是否有一种方法可以轻松安全地纠正 float 。

例如,

输入时:"32 + 32.1 "结果:“64.0999999999999”

我还必须提到,在使用科学记数法时,这种情况经常发生。“(2.3 * 10^23)*(1.452 * 10^23)”返回:“3.339599999999999999e+46”

最后,有时返回的数字是:前任。123.0000000000001

感谢您的帮助!

编辑

获批的答案很棒。但我发现对我有用的是在 NSString stringWithFormat 中使用 %g 和 double 。 %g 似乎很恰本地四舍五入。例如。

    answer.text = [NSString stringWithFormat@" %g ", doubleAnswer];

在您的计算中使用 double,然后使用该方法似乎对我有用,我希望这对其他人也有帮助。如果这不是您要找的答案,请查看已批准的答案!

最佳答案

float 不能很好地表示特定数字。使用 double 会使这种情况发生的频率降低,但您仍然会遇到问题。有关如何存储 float 的技术说明(以及为什么我们首先遇到此问题),请参阅此维基百科文章:IEEE 754-1985 . (基本上, float 存储为值的二进制表示形式,并且只有这么多位可供使用,因此它们很快就会用完并且必须四舍五入到它们能够表示的最接近的值。)

通常,您不必担心 +/- .0000001,当您想要将它们显示给具有适当小数点的用户时,只需格式化它们,它就会四舍五入。但在内部,它的存储方式并不重要。

例如,如果你想显示“结果”,你可以这样做:

float myFloat = 32 + 32.1;
NSString *result = [NSString stringWithFormat:%@"%.2f", myFloat];
// result will contain 64.10

如果你不想要固定的小数点数,你也可以使用NSNumber的 float 到字符串的转换能力:

float myFloat = 32 + 32.1;
NSNumber *myNumber = [NSNumber numberWithFloat:myFloat];
NSString *result = [myNumber stringValue];
// result will contain 64.1

NSDecimalNumber 将为您处理所有这一切,但它会涉及更多,涉及更多开销,但这里有一个让您入门的示例:

NSDecimalNumber *num1   = [NSDecimalNumber decimalNumberWithString:@"32"];
NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:@"32.1"];
// Or since you use exponents:
// NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithMantissa:321 exponent:-1 isNegative:NO];

NSDecimalNumber *myNumber = [num1 decimalNumberByAdding:num2];
NSString *result = [myNumber stringValue];
// result will contain 64.1

关于iphone - 更正 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10049533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com