Objective c 如何将一个数字舍入到小数点后零位

Objective c 如何将一个数字舍入到小数点后零位,objective-c,Objective C,如何将NSNumber四舍五入为零十进制空间,在下一行中似乎保留了十进制空间: NSNumber holidayNightCount = [NSNumber numberWithDouble:sHolidayDuration.value]; 如果您只需要一个整数,为什么不使用int呢 int holidayNightCount = (int)sHolidayDuration.value; 根据定义,整数没有小数点 如果需要使用NSNumber,可以将Double转换为Int,然后使用Int创

如何将NSNumber四舍五入为零十进制空间,在下一行中似乎保留了十进制空间:

NSNumber holidayNightCount = [NSNumber numberWithDouble:sHolidayDuration.value];

如果您只需要一个整数,为什么不使用int呢

int holidayNightCount = (int)sHolidayDuration.value;
根据定义,整数没有小数点

如果需要使用NSNumber,可以将Double转换为Int,然后使用Int创建NSNumber

int myInt = (int)sHolidayDuration.value;
NSNumber holidayNightCount = [NSNumber numberWithInt:myInt];

通常,强制转换为int截断。例如,3.4变为3(根据需要),但3.9也变为3。如果出现这种情况,请在铸造前添加0.5

int myInt = (int)(sHolidayDuration.value + 0.5);

这里有一点冗长的方法

float test = 1.9;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setRoundingMode:NSNumberFormatterRoundHalfUp];
[formatter setMaximumFractionDigits:0];
NSLog(@"%@",[formatter  stringFromNumber:[NSNumber numberWithFloat:test]]);
[formatter release];

您还可以执行以下操作:int roundedRating=(int)round(rating.floatValue)

使用旧的C函数Floor()输入数字,然后可以创建更合适的NSInteger,请参见:

有关此主题的更多信息,请参见:


或者,您可以使用NSDecimalNumber功能对数字进行舍入。

重复楼层更可能是您所需要的behavior@JoshuaWeinberg从技术上讲,这应该是截断,这和地板是一样的。地板和截断对于负片是不同的。这是一个非常巧妙的方法来绕过总结。我从未想过这样做,因为ios中内置了舍入工具。我非常喜欢这个答案。这对负数不起作用,但对于负数,试试这个
int myInt=(int)(sHolidayDuration.value>0?sHolidayDuration.value+0.5:sHolidayDuration.value-0.5)这是我一直在寻找的。在我的例子中,我想要一个或两个小数位,在这方面,这个方法更强大。
NSInteger holidayNightCount = [NSNumber numberWithInteger:floor(sHolidayDuration.value)].integerValue;