我在浮点数中有值25.00,但当我在屏幕上打印它时,它是25.0000000。 如何显示只有两位小数点后的值?


当前回答

所有答案的问题是,乘法和除法会导致精度问题,因为你使用了除法。这是我很久以前在PDP8上编程时学到的。 解决方法是:

return roundf(number * 100) * .01;

因此,15.6578只返回15.66,而不是15.6578999或类似意外的结果。

你想要的精确程度取决于你自己。只是不要除以乘积,要乘以等量的小数。 不需要搞笑的字符串转换。

其他回答

所有答案的问题是,乘法和除法会导致精度问题,因为你使用了除法。这是我很久以前在PDP8上编程时学到的。 解决方法是:

return roundf(number * 100) * .01;

因此,15.6578只返回15.66,而不是15.6578999或类似意外的结果。

你想要的精确程度取决于你自己。只是不要除以乘积,要乘以等量的小数。 不需要搞笑的字符串转换。

下面是一些根据精度动态格式化的方法:

+ (NSNumber *)numberFromString:(NSString *)string
{
    if (string.length) {
        NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
        f.numberStyle = NSNumberFormatterDecimalStyle;
        return [f numberFromString:string];
    } else {
        return nil;
    }
}

+ (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision
{
    NSNumber *numberValue = [self numberFromString:string];

    if (numberValue) {
        NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision];
        return [NSString stringWithFormat:formatString, numberValue.floatValue];
    } else {
        /* return original string */
        return string;
    }
}

如。

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4];

=> 2.3453

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0];

=> 2

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2];

=> 2.35(取整)

你也可以尝试使用NSNumberFormatter:

NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];

你可能还需要设置否定格式,但我认为解决这个问题已经足够聪明了。

在objective -c中,你想显示2个十进制数的浮点值,然后传递参数指示你想显示多少个小数点 例如0.02f将打印25.00 0.002f将打印25.000

在Swift语言中,如果你想要显示你需要这样使用它。要在UITextView中赋值double,例如:

let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)

如果你想在LOG中显示,就像objective-c使用NSLog()一样,那么在Swift语言中你可以这样做:

println(NSString(format:"%.2f", result))