Objective-C:如何从0.123或一般xyz ...从0.xyz ...获得123?

时间:2012-07-31 06:32:58

标签: iphone ios objective-c fractions

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

我在想:

  1. 获取小数点的索引(位置)
  2. 然后我可以知道小数点后的位数
  3. 将这些数字作为子字符串
  4. 将其转换为整数
  5. 有更好/更聪明的方法吗?

    更新

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

8 个答案:

答案 0 :(得分:9)

您使用modf功能:

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

参考此fractional part of NSDecimalnumber

答案 1 :(得分:5)

 float temp=12.123;
NSString *str=[NSString stringWithFormat:@"%f",temp];
NSArray *arr=[str componentsSeparatedByString:@"."];
int tempInt=[[arr lastObject] intValue];

答案 2 :(得分:4)

NSString *str = [NSString stringWithFormat:@"%f", value];
NSArray *arr = [str componentsSeparatedByString:@"."];
int num = [[arr objectAtIndex:1] intValue];

答案 3 :(得分:2)

我们举一个例子: x = 129.567;

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

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

z = z * 1000; 所以z = 567

我认为那就是你要找的东西。

答案 4 :(得分:1)

如何获取浮点并乘以1000并将结果转换为整数?

答案 5 :(得分:0)

查看NSDecimalNumberNSDecimal

答案 6 :(得分:0)

Float永远不会代表一个准确的数字。最好的方法是从“double”数字创建一个字符串,然后进行字符串操作以获得小数点后的数字。

答案 7 :(得分: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”的注意事项: