0

很抱歉没有发布任何代码。这个问题与在 xcode ios 中工作时浮点数的除法和乘法有关。

我有变量,我需要除以 2.055926336e+09。不过可惜编译器不分吗?

我如何在代码中使用它

float variable1=((variable2)/(2.055926336e+09));

这对于用较小的值进行除法是正确的(例如:- (1/(2.055926336e+09) )这是什么原因?有什么有效的方法来完成这项工作吗?

提前致谢!

4

3 回答 3

7

我怀疑问题不在您的计算中。它在你的印刷品中。您可能正在尝试使用类似的格式打印答案%f。默认情况下,%f在小数点右侧打印 6 位数字。

10/2.055926336e+09 的值是 0.000000004863987500377056... 如您所见,它在小数点后有 6 个以上的零。如果您尝试使用 格式化它%f,您只会得到零。

如果您使用%e(或%g) 对其进行格式化,格式化程序将使用科学计数法,并将结果打印为4.863988e-10,表明结果不为零。

于 2012-07-01T20:18:40.260 回答
1

当您说“它不除”时,您的意思是它返回的结果是0

如果是这样,您的问题是浮点精度。 10 / 2055926336是一个非常小的数字。浮点数只有 6 位小数精度,并且无法准确存储。

您的问题不是数字太大,而是结果太小。尝试改用double数据类型,但请记住,如果您的数字变得比这更小,它将不起作用(双精度数为 15 位)。

于 2012-07-01T20:06:38.900 回答
0

@rob mayoff 的回答非常有效,但您可能对向用户展示科学结果不感兴趣。我的看法是将大数分成两个字符串并将它们连接起来,如下所示

-(NSString*) stringWithLargeNumber:(double)large
{
    int fraction1 = large/10000;
    float fraction2 = large-fraction1;
    return [NSString stringWithFormat:@"%d%.2f", fraction1, fraction2];
}

希望这可以帮助

于 2013-04-12T11:26:53.243 回答