如标题所述,如果我有一个浮点数,我需要将小数部分作为整数,我该怎么做?
我刚在想:
- 获取小数点的索引(位置)
- 那么我可以知道小数点后有多少位
- 将这些数字作为子字符串
- 将其转换为整数
有没有更好/更聪明的方法?
更新:
我忘了提,浮点数的格式如下:X.YZ 所以小数点后最多有两位数。
如标题所述,如果我有一个浮点数,我需要将小数部分作为整数,我该怎么做?
我刚在想:
有没有更好/更聪明的方法?
更新:
我忘了提,浮点数的格式如下:X.YZ 所以小数点后最多有两位数。
您使用modf功能:
double integral;
double fractional = modf(some_double, &integral);
float temp=12.123;
NSString *str=[NSString stringWithFormat:@"%f",temp];
NSArray *arr=[str componentsSeparatedByString:@"."];
int tempInt=[[arr lastObject] intValue];
NSString *str = [NSString stringWithFormat:@"%f", value];
NSArray *arr = [str componentsSeparatedByString:@"."];
int num = [[arr objectAtIndex:1] intValue];
举个例子:x = 129.567;
将 x 转换为整数并放入 y。y = int(x); 所以 y = 129;
现在从 x 中减去 y。所以 z = xy; z = .567
z = z*1000;所以 z = 567
我想这就是你要找的。
取浮点数乘以 1000 并将结果转换为整数怎么样?
这是我的解决方案:
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”的注意事项:
看看NSDecimalNumber
和NSDecimal
。
浮点数永远不能准确地表示数字。最好的方法是从“双”数字创建一个字符串,然后进行字符串操作以获取小数点后的数字。