圆形的带有小数的浮点数

时间:2012-08-28 15:09:34

标签: objective-c ios floating-point decimal

有人知道是否有一种方法可以在纪念品之后将两个数字四舍五入。

示例:

10.28000 -> 10.3
13.97000 -> 14.0
5.41000 -> 5.4

非常感谢!

此致 塞巴斯蒂安;)

6 个答案:

答案 0 :(得分:1)

试试这个:

float aFloatValue = 3.1415926;
NSString *formatted = [NSString stringWithFormat:@"%01.1f", aFloatValue];
NSLog(@"Formatted: %@", formatted);

将其视为一个好的sprintf

答案 1 :(得分:1)

使用NSNumberFormatter创建具有指定阵营数字的字符串。

float num = 10.28000;

formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:1];

NSNumber *value = [NSNumber numberWithFloat:num];
NSString *newNumString = [formatter stringFromNumber:value];

答案 2 :(得分:1)

您也可以尝试

float num = 10.28000
float result = (roundf(num * 10.0))/10.0;

(乘以10,然后再舍入,然后再乘以10) 不要忘记.0这样除法是浮点而不是整数,它将再次舍入

答案 3 :(得分:1)

具有NSRoundPlain行为的纯Cocoa方式:

- (NSDecimalNumber *)decimalNumberForFloat:(float)f_

{

NSNumber *number                           = [NSNumber numberWithFloat:f_];
NSDecimal decimal                          = [number decimalValue];
NSDecimalNumber *originalDecimalNumber     = [NSDecimalNumber decimalNumberWithDecimal:decimal];
NSDecimalNumberHandler *roundingBehavior   = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain
                                              scale:0
                                              raiseOnExactness:NO
                                              raiseOnOverflow:NO
                                              raiseOnUnderflow:NO
                                              raiseOnDivideByZero:NO];

return [originalDecimalNumber decimalNumberByRoundingAccordingToBehavior:roundingBehavior];

}

因为NSDecimalNumber是NSNumber的子类,要获取原始的float调用 - [NSDecimalNumber floatValue]

答案 4 :(得分:0)

试试这个:

float myFloat = 10.4246f;
myFloat = ((int) ((myFloat * 100) + 5)) / 100.0f;

答案 5 :(得分:0)

float fval = 1.54f;
float nfval = ceilf(fval * 10.0f + 0.5f)/10.0f;