Objective-C中双精度的范围是多少?

Objective-C中双精度的范围是多少?,objective-c,double,Objective C,Double,我有一个计算大距离的程序。然后使用stringfromnumber转换距离(双精度),以插入逗号(即1234567)。只要距离小于2000000000,此操作就可以正常工作。任何时候我超过20亿,我得到一个负数,这也是不正确的距离。通过查看帮助,我似乎在double的范围内。double可以容纳从无限到负无限的任何内容。然而,它只能准确地保持15位数字。另外,请记住,如果您将其强制转换为int,并且double存储的值大于2147483648,则int将溢出为负数。您可以检查您自己的float.

我有一个计算大距离的程序。然后使用stringfromnumber转换距离(双精度),以插入逗号(即1234567)。只要距离小于2000000000,此操作就可以正常工作。任何时候我超过20亿,我得到一个负数,这也是不正确的距离。通过查看帮助,我似乎在double的范围内。

double可以容纳从无限到负无限的任何内容。然而,它只能准确地保持15位数字。另外,请记住,如果您将其强制转换为int,并且double存储的值大于2147483648,则int将溢出为负数。

您可以检查您自己的
float.h
中的
DBL_MAX
来找出答案。我从以下方面获得了1.797693e+308的值:

#include <stdio.h>
#include <float.h>

int main ( void ) {
    printf("Max double %e \n", DBL_MAX);
    return 0;
}
#包括
#包括
内部主(空){
printf(“最大加倍%e\n”,DBL\u Max);
返回0;
}

从无穷大到负无穷大不是一个很好的描述,因为根据无穷大的定义,这在物理上是不可能的。双精度的最大指数为1023,最小指数为−1022,因此它可以用最多15位数字表示从2^-1022到2^1023的范围,以及±无穷大和NaN。这是真的,但大多数人无法理解这个数字范围有多大(2^1023个气体原子会填满一个高升的容器),从技术上讲,一个替身能容纳的最大数字是无穷大,而一个替身能容纳的最小数字是-infinity。谢谢你的快速回复。这正是正在发生的事情。有什么方法可以使大于2147483648的数字正确显示?如果必须强制转换,请尝试使用长字符。除非你用纳米计算到已知宇宙边缘的距离,即使这样,你也应该设置一个长的(或长的)。。。请尝试[NumberFormatterStringFromNumber:[NSNumber numberWithDouble:doubleVar]];其中NumberFormat是格式化程序,doubleVar是变量