不能乘以或除大或小的浮点数?

时间:2012-07-01 19:58:14

标签: ios xcode nsnumber

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

我有变量,我需要除以2.055926336e + 09。但遗憾的是编译器没有划分它?

我如何在代码中使用它

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

对于用较小的值划分(例如: - (1 /(2.055926336e + 09)) 这是什么原因?完成这项任务的有效方法是什么?

提前致谢!

3 个答案:

答案 0 :(得分:7)

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

10 / 2.055926336e + 09的值是0.000000004863987500377056 ...正如您所看到的,紧跟小数点后有超过6个零。如果您尝试使用%f对其进行格式化,则只会得到零。

如果您使用%e(或%g)格式化,格式化程序将使用科学记数法,并将结果打印为4.863988e-10,表明结果不为零。< / p>

答案 1 :(得分:1)

当你说“它没有分开”时,你的意思是它返回的结果是0吗?

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

你的问题不是数字太大,而是结果太小了。请尝试使用double数据类型,但请记住,如果您的数字甚至小于此值,则无效(双精度数为15位)。

答案 2 :(得分:0)

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

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

希望这有帮助