很抱歉没有发布任何代码。这个问题与在 xcode ios 中工作时浮点数的除法和乘法有关。
我有变量,我需要除以 2.055926336e+09。不过可惜编译器不分吗?
我如何在代码中使用它
float variable1=((variable2)/(2.055926336e+09));
这对于用较小的值进行除法是正确的(例如:- (1/(2.055926336e+09) )这是什么原因?有什么有效的方法来完成这项工作吗?
提前致谢!
我怀疑问题不在您的计算中。它在你的印刷品中。您可能正在尝试使用类似的格式打印答案%f
。默认情况下,%f
在小数点右侧打印 6 位数字。
10/2.055926336e+09 的值是 0.000000004863987500377056... 如您所见,它在小数点后有 6 个以上的零。如果您尝试使用 格式化它%f
,您只会得到零。
如果您使用%e
(或%g
) 对其进行格式化,格式化程序将使用科学计数法,并将结果打印为4.863988e-10
,表明结果不为零。
当您说“它不除”时,您的意思是它返回的结果是0
?
如果是这样,您的问题是浮点精度。 10 / 2055926336
是一个非常小的数字。浮点数只有 6 位小数精度,并且无法准确存储。
您的问题不是数字太大,而是结果太小。尝试改用double
数据类型,但请记住,如果您的数字变得比这更小,它将不起作用(双精度数为 15 位)。
@rob mayoff 的回答非常有效,但您可能对向用户展示科学结果不感兴趣。我的看法是将大数分成两个字符串并将它们连接起来,如下所示
-(NSString*) stringWithLargeNumber:(double)large
{
int fraction1 = large/10000;
float fraction2 = large-fraction1;
return [NSString stringWithFormat:@"%d%.2f", fraction1, fraction2];
}
希望这可以帮助