【问题标题】:Small numbers in Objective C 2.0Objective C 2.0 中的小数字
【发布时间】:2010-08-20 08:24:34
【问题描述】:

我创建了一个计算器类,它执行基本的 +、-、%、* 和 sin、cos、tan、sqrt 和其他数学函数。

我有所有 double 类型的变量,对于大数来说一切正常,所以我可以计算像 1.35E122 这样的数字,但问题在于非常小的数字。例如,如果我计算 1/98556321,我得到 0,而我想得到 1.01464E-8。

我是否应该重写我的代码以便只操作 NSDecimalNumber 的,如果是,我应该如何处理只接受 double 和 long double 值的 sin 和 cos 数学函数。

【问题讨论】:

  • 例如,iPhone 自己的计算器将这个值正确显示为 1.014648e-8...我想知道他们是如何得到这个数字的

标签: ios objective-c


【解决方案1】:
1/98556321

这个除法给你 0 因为这里执行整数除法 - 结果是除法的整数部分。以下行应该给你浮点结果:

1/(double)98556321

【讨论】:

  • 即使我按照您建议的方式操作,它仍然返回 0... double nr1 = 1/(double)98556321; NSLog(@"结果 = %f", nr1); //输出0.000000
  • NSLog 默认显示逗号后 6 位数字,但您的值小于该值。试试 NSLog(@"Result = %.12f", nr1);例如,您会看到结果不是 0。
【解决方案2】:

integer/integer 始终是整数

所以要么将大数或小数转换为小数

(double)1/98556321

1/(double)98556321

明确地将数字转换为双精度。

编码愉快....

【讨论】:

  • 但是这个例子给出了他正在划分整数/整数的观点仍然接受它的错误......感谢Eiko的解释。
  • 我遇到的一个问题是我使用 NSNumberFormatter 来格式化我的双精度值。当我有像 1E-6 这样的小数字时,它会将它们转换为 0。我通过 initWithDouble 方法实例化 NSNumber,然后将 NSNumber 实例传递给 NSNumberFormatter 但是,仍然没有得到所需的结果(只有 6 位数字)......任何对此有什么想法?
猜你喜欢
  • 2010-10-08
  • 2010-10-05
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多