[英]floor double by decimal place
我想用可变的十进制长度(在iPhone sdk中)将其double乘以其小数位。
这里有一些例子来告诉你我的意思
NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:2); // should return 34.52
NSLog(@"%f",[self floorMyNumber:34.52662 toPlace:2); // should return 34.52
NSLog(@"%f",[self floorMyNumber:34.52432 toPlace:3); // should return 34.524
NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:3); // should return 34.524
NSLog(@"%f",[self floorMyNumber:34.12462 toPlace:0); // should return 34.0
NSLog(@"%f",[self floorMyNumber:34.92462 toPlace:0); // should return 34.0
任何想法如何做到这一点?
-(double)floorNumberByDecimalPlace:(float)number place:(int)place {
return (double)((unsigned int)(number * (double)pow(10.0,(double)place))) / (double)pow(10.0,(double)place);
}
另一个解决方案:
放置为10(示例:13.1),100(示例:12.31),依此类推
双精度值=(双精度)((无符号整数)(值*(双精度)放置))/(双精度)放置
如果只是为了打印它们而将它们四舍五入,则可以使用标准的printf格式说明符进行此操作。 例如,要打印3个小数,可以使用“%.3f”代替“%f”
使用sprintf(或更好的snprintf)将其格式化为字符串,然后裁剪字符串的末尾。
将其乘以10 ^(小数位),将其转换为整数,然后除以10 ^(小数位)。
double floorToPlace(double number, int places)
{
int decimalPlaces = 1;
for (int i = 0; i < places; i++) divideBy *= 10;
return (int)(number * decimalPlaces) / (double)decimalPlaces;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.