我想知道是否有一个简单的函数我可以使用这样的样本。 我有一个
float value = 1.12345;
我想通过调用类似
的方式来解决这个问题float value2 = [roundFloat value:value decimal:3];
NSLog(@"value2 = %f", value2);
我得到“1.123”
是否有Library
或默认函数,或者我应该为这种类型的计算编写代码块?
提前感谢您的帮助
答案 0 :(得分:7)
使用NSLog(@"%f", theFloat)
始终输出六位小数,例如:
float theFloat = 1;
NSLog(@"%f",theFloat);
输出:
1.000000
换句话说,您永远不会使用1.123
获得NSLog(@"%f", theFloat)
。
三位小数后的截止:
float theFloat = 1.23456;
float newFLoat = (int)(theFloat * 1000.0) / 1000.0;
NSLog(@"%f",newFLoat);
输出:
1.234000
舍入到三位小数(使用roundf()
/ lroundf()
/ ceil()
/ floor()
):
float theFloat = 1.23456;
float newFLoat = (int)(roundf(theFloat * 1000.0)) / 1000.0;
NSLog(@"%f",newFLoat);
输出:
1.235000
舍入到三位小数(脏路):
float theFloat = 1.23456;
NSString *theString = [NSString stringWithFormat:@"%.3f", theFloat];
float newFloat = [theString floatValue];
NSLog(@"%@",theString);
NSLog(@"%f",newFloat);
输出:
1.235
1.235000
答案 1 :(得分:3)
打印值使用:
NSLog(@"value2 = %.3f", value2);
在计算之前舍入到3个十进制数字实际上没有意义,因为float
不是精确数字。即使您将其四舍五入为1.123
,也会类似于1.122999999998
。
规则:
NSDecimalNumber
或定点算术。答案 2 :(得分:1)
浮点数没有小数位,它们有二进制位。小数基数具有小数位。除非转换为十进制基数,否则不能将浮点数舍入到特定的小数位数。没有例程,方法,功能等,返回浮点值可能会执行此任务。
答案 3 :(得分:0)
请注意,“Round”并不一定像您想象的那么简单。例如
DIY Calculator: Rounding Algorithms 101列出了16种不同的方法来舍入数字。
Wikipedia:Rounding涵盖了很多相同的基础
Cplusplus拥有一堆Rounding Algorithms的源代码,可以轻松转换为objective-c
您想要舍入的方式取决于您使用数据的上下文。
我应该指出Stack Overflow已经有plethora of other questions about rounding in objective-c
答案 4 :(得分:0)
//Your Number to Round (can be predefined or whatever you need it to be)
float numberToRound = 1.12345;
float min = ([ [[NSString alloc]initWithFormat:@"%.0f",numberToRound] floatValue]);
float max = min + 1;
float maxdif = max - numberToRound;
if (maxdif > .5) {
numberToRound = min;
}else{
numberToRound = max;
}
//numberToRound will now equal it's closest whole number (in this case, it's 1)
答案 5 :(得分:0)
这是一种简单的方法:
float numberToRound = 1.12345f;
float remainder = numberToRound*1000.0f - (float)((int)(numberToRound*1000.0f));
if (remainder >= 0.5f) {
numberToRound = (float)((int)(numberToRound*1000.0f) + 1)/1000.0f;
}
else {
numberToRound = (float)((int)(numberToRound*1000.0f))/1000.0f;
}
对于任意小数位,请使用
替换上述代码中的1000.0ffloat mult = powf(10.0f, decimal);
答案 6 :(得分:-1)
试
#import <math.h>
float cutFloat( float number, int decimal) {
number = number*( pow(10,decimal) );
number = (int)number;
number = number/( pow(10,decimal) ) ;
return number;
}