22.368511のようにdouble値があります。小数点以下2桁に四捨五入したいと思います。つまり、22.37を返します。
どうやってやるの?
回答:
ほとんどの言語と同様に、形式は
%.2f
編集: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、あなたに大きな感謝:)
以下のコードを使用して、小数点以下2桁にフォーマットできます。
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関数を使用できます
doubleから小数を削除するには、この出力を見てください
Obj 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
私はジェイソンの答えで行くつもりでしたが、私のバージョンの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()を使用できない、文字列が不要な場合の簡単な解決策があります(通常、プレイグラウンドにいる場合)。
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
}
}