我正在开发一款应用,想要完善价值观 即如果输出为4.8我想显示4.8 如果输出为4.0,我想显示4
另外,如果我可以精确地舍入值,那将是很好的:如果值是4.34然后舍入到4.3而如果它是4.37然后将其舍入到4.4
答案 0 :(得分:7)
舍入浮点值的一种方法是只添加0.5,然后截断该值。
double valueToRound = GetTheValueFromSomewhere();
double roundedValue = (double)((int)(valueToRound + 0.5));
例如,这将从1.4到1.0和1.5再到2.0。要像你提到的那样舍入到其他小数位,只需将初始值乘以10或100等,使用相同类型的代码,然后将结果除以相同的数字,您将得到相同的结果,无论小数你想要的地方。
以下是以任意精度进行舍入的示例。
double valueToRound = GetTheValueFromSomewhere();
int decimalPrecisionAtWhichToRound = 0;
double scale = 10^decimalPrecisionAtWhichToRound;
double tmp = valueToRound * scale;
tmp = (double)((int)(tmp + 0.5));
double roundedValue = tmp / scale;
因此,如果decimalPrecisionAtWhichToRound设置为0,如上所述,它将舍入到最接近的整数。 1.4将舍入到1.0。 1.5将圆到2.0。
如果将decimalPrecisionAtWhichToRound设置为1,它将舍入到最接近的十分之一。 1.45将转为1.5,而1.43将转为1.4。
答案 1 :(得分:2)
您需要首先了解如何在纸上进行四舍五入,而无需向您显示代码。写下一些数字并弄清楚如何围绕它们。
要舍入到特定小数位,请将该位置的值加一半然后截断。即,1.67 + 0.05 = 1.72然后截断为1.7。
但是当你在纸上做这件事时,编程中有两件棘手的事情不存在:
为了截断将数字乘以适当的10的幂来产生整数的技巧,效果非常好。例如,(1.67 + 0.05)* 10 = 17.2,然后转换为int得到17,然后转换回浮点并除以10得到1.7(或多或少)。或者(如果您正在打印或显示该值)只需格式化插入小数点的整数。 (通过格式化整数值,您不必处理不精确浮点表示的问题。)
如果你想抑制尾随零,它会变得有点棘手,你可能不得不实际写一些代码 - 格式化数字,然后向后扫描并取消任何尾随零到小数点。 (如果你愿意,也可以取小数点。)
答案 2 :(得分:2)
float number=17.125;
NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
NSString *temp = [format stringFromNumber:[NSNumber numberWithFloat:number]];
NSLog(@"%@",temp);
答案 3 :(得分:1)
double myNumber = 7.99;
NSString *formattedNumber = [NSString stringWithFormat:@"%.*f",
fmod(round(myNumber * 10), 10) ? 1 : 0, myNumber];