【发布时间】:2011-02-13 17:47:13
【问题描述】:
我有一个双精度值 22.368511 我想将其四舍五入到小数点后 2 位。即它应该返回 22.37
我该怎么做?
【问题讨论】:
-
您要返回小数点后 2 位的值吗?还是以 2 位小数显示值?
-
其实我只要展示一下就可以了
标签: iphone objective-c cocoa-touch
我有一个双精度值 22.368511 我想将其四舍五入到小数点后 2 位。即它应该返回 22.37
我该怎么做?
【问题讨论】:
标签: iphone objective-c cocoa-touch
与大多数语言一样,格式为
%.2f
你可以看到更多例子here
编辑:如果您担心 25.00 时点的显示,我也知道了
{
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setPositiveFormat:@"0.##"];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34 2010-08-22 15:04:10.616 a.out[6954:903] 25.3 2010-08-22 15:04:10.617 a.out[6954:903] 25
【讨论】:
setPositiveFormat:,因为 setFormat: 方法不存在(仅针对 Mac 定义),但仍然 - 很好的答案,为我节省了数小时的实验时间,所以 +1 和非常感谢你:)
您可以使用以下代码将其格式化为两位小数
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];
NSLog(@"Result...%@",numberString);//Result 22.37
斯威夫特 4:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up
let str = String(describing: formatter.string(from: 12.2345)!)
print(str)
【讨论】:
value = (round(value*100)) / 100.0;
【讨论】:
[label setText:@"Value: %.2f", myNumber];
【讨论】:
你可以使用NSDecimalRound函数
【讨论】:
要从双精度中删除小数,请查看此输出
对象 C
double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);
输出将是:
10.02
10
Swift 2.1 和 Xcode 7.2.1
let hellodouble:Double = 3.14159265358979
print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
print(String(format:"Your value with no decimals: %.0f", hellodouble))
输出将是:
3.14
3
【讨论】:
我打算接受 Jason 的回答,但我注意到在我的 Xcode 版本(4.3.3)中我不能这样做。因此,经过一番研究,我发现他们最近更改了类方法并删除了所有旧方法。所以我必须这样做:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
【讨论】:
使用 NSNumber *aNumber = [NSNumber numberWithDouble:number];而不是 NSNumber *aNumber = [NSNumber numberWithFloat:number];
+(NSString *)roundToNearestValue:(double)number
{
NSNumber *aNumber = [NSNumber numberWithDouble:number];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setUsesGroupingSeparator:NO];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMinimumFractionDigits:0];
NSString *string = [numberFormatter stringFromNumber:aNumber];
return string;
}
【讨论】:
对于 Swift,如果您不能导入 Foundation、使用 round() 和/或不想要字符串(通常是在 Playground 中的情况),则有一个简单的解决方案:
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
结果:31.726
【讨论】:
我使用Umberto Raimondi扩展类型Double发布的解决方案:
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
【讨论】:
你可以这样做:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
【讨论】: