繁体   English   中英

Objective-C:如果在小数点后有某个值,如何将双精度舍入到小数点后两位小数,否则该值应四舍五入到小数点后0位

[英]Objective-C: how to round of double to 2 decimal places if there is some value after decimal otherwise the value should be rounded to 0 decimal places

如何格式化实际值,如下所示:

/// variable
double value = 9.99999

/// conversion
NSSting* str = [NSString stringWithFormat:@"%.2f", value];

/// result
9.99

但是当值是9.00000时返回9.00

我应该如何格式化将9.0000 as 9显示9.0000 as 9并将9.99999 as 9.99的字符串?

您应该看看NSNumberFormatter。 我在Swift中添加了代码,但是您可以轻松地将其转换为Objective-C:

let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 2
formatter.roundingMode = NSNumberFormatterRoundingMode.RoundFloor
print("\(formatter.stringFromNumber(9.00))")

// Objective-C(信用归NSNoob所有)

        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setNumberStyle: NSNumberFormatterDecimalStyle];
        formatter.minimumFractionDigits = 0;
        formatter.maximumFractionDigits = 2;
        [formatter setRoundingMode:NSNumberFormatterRoundFloor];
        NSString* formattedStr = [formatter stringFromNumber:[NSNumber numberWithFloat:9.00]];
        NSLog(@"number: %@",formattedStr);

根据此相关问题的答案 ,您可以尝试做:

// Usage for Output   1 — 1.23
[NSString stringWithFormat:@"%@ — %@", [self stringWithFloat:1], 
                                       [self stringWithFloat:1.234];

// Checks if it's an int and if not displays 2 decimals.
+ (NSString*)stringWithFloat:(CGFloat)_float
{
    NSString *format = (NSInteger)_float == _float ? @"%.0f" : @"%.2f";
    return [NSString stringWithFormat:format, _float];
}

在Swift中,您可以使用“ %g ”(“使用最短表示形式”)格式说明符:

import UIKit

let firstFloat : Float = 1.0
let secondFloat : Float = 1.2345

var outputString = NSString(format: "first: %0.2g second: %0.2g", firstFloat, secondFloat)

print("\(outputString)")

返回:

"first: 1 second: 1.2"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM