很抱歉没有发布任何代码。这个问题涉及在xcode ios中工作时浮点数的除法和乘法。
我有变量,我需要除以2.055926336e + 09。但遗憾的是编译器没有划分它?
我如何在代码中使用它
float variable1=((variable2)/(2.055926336e+09));
对于用较小的值划分(例如: - (1 /(2.055926336e + 09)) 这是什么原因?完成这项任务的有效方法是什么?
提前致谢!
答案 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];
}
希望这有帮助