20

当我运行以下代码时,

NSString* s= @"10000000.01";
float f = [s floatValue];
double d = [s doubleValue];

if(f > 10000000)
{
    NSLog(@"Over Value");
}
else {
    NSLog(@"OK Float");
}

if(d > 10000000)
{
    NSLog(@"Over value");
}
else {
    NSLog(@"OK Double");
}

响应如下。

2013-04-19 17:07:29.284 float[2991:907] OK Float
2013-04-19 17:07:29.287 float[2991:907] Over value

为什么浮点值更改为 10000000.00 而不是 10000000.01 ?

4

3 回答 3

44

float是 32 位,double而是 64 位。浮点数的有效数字少于双精度数。

一个float值不能存储足够的 10 位数字10000000.01

另请参阅float 和 double 之间的区别了解更多详细信息。那是关于 C/C++ 的,但它也适用于 Objective-C。

于 2013-04-19T15:45:50.330 回答
3

双倍的

  1. 表示一个 64 位浮点数。
  2. 具有至少 15 位十进制数字的精度。

漂浮

  1. Float 表示一个 32 位浮点数。
  2. Float 的精度可以低至 6 位十进制数字。

要使用的适当浮点类型取决于您需要在代码中使用的值的性质和范围。在任何一种类型都适用的情况下,Double 是首选。

于 2020-10-13T05:30:07.183 回答
1

精确

  • Float - 32 位(7 位)浮点精度
  • Double - 64 位(15 位)浮点精度
  • 一位分配给有符号位。

内存要求

  • 浮点数 - 4 个字节
  • 双 - 8 个字节

范围

  • 浮动 - 在 1.2E-38 到 3.4E+38 内
  • 双 - 在 2.3E-308 到 1.7E+308 内
于 2021-02-04T17:42:49.583 回答