2

如标题所述,如果我有一个浮点数,我需要将小数部分作为整数,我该怎么做?

我刚在想:

  1. 获取小数点的索引(位置)
  2. 那么我可以知道小数点后有多少位
  3. 将这些数字作为子字符串
  4. 将其转换为整数

有没有更好/更聪明的方法?

更新:

我忘了提,浮点数的格式如下:X.YZ 所以小数点后最多有两位数。

4

8 回答 8

9

您使用modf功能:

double integral;
double fractional = modf(some_double, &integral);

参考NSDecimalnumber 的这个小数部分

于 2012-07-31T06:43:21.390 回答
5
 float temp=12.123;
NSString *str=[NSString stringWithFormat:@"%f",temp];
NSArray *arr=[str componentsSeparatedByString:@"."];
int tempInt=[[arr lastObject] intValue];
于 2012-07-31T07:04:09.943 回答
4
NSString *str = [NSString stringWithFormat:@"%f", value];
NSArray *arr = [str componentsSeparatedByString:@"."];
int num = [[arr objectAtIndex:1] intValue];
于 2012-07-31T06:54:01.430 回答
2

举个例子:x = 129.567;

将 x 转换为整数并放入 y。y = int(x); 所以 y = 129;

现在从 x 中减去 y。所以 z = xy; z = .567

z = z*1000;所以 z = 567

我想这就是你要找的。

于 2012-07-31T06:42:01.347 回答
1

取浮点数乘以 1000 并将结果转换为整数怎么样?

于 2012-07-31T06:42:23.883 回答
0

这是我的解决方案:

float value = 12.345f;
float integral;
float divisor = 1000.0f;
float fractional = modff(value, &integral);  // breaks a float into fractional and integral parts

int xyz = (int)fmodf(fractional*divisor, divisor);  // modulo (cannot just use %)

NSLog(@"XYZ: %d", xyz); // logs "XYZ: 345"

通过更改您的值divisor可以获得您想要的精度,例如只有 XY (100.0f) 或 X (10.0f)。

该解决方案不是最高效的,但很有用。我认为它可以使用按位运算进行优化。

使用“f”的注意事项:

于 2012-07-31T09:28:10.313 回答
0

看看NSDecimalNumberNSDecimal

于 2012-07-31T06:38:27.927 回答
0

浮点数永远不能准确地表示数字。最好的方法是从“双”数字创建一个字符串,然后进行字符串操作以获取小数点后的数字。

于 2012-07-31T06:48:22.243 回答