double値を小数点以下2桁に丸める


87

22.368511のようにdouble値があります。小数点以下2桁に四捨五入したいと思います。つまり、22.37を返します。

どうやってやるの?


1
小数点以下2桁でその値を返しますか?または小数点以下2桁で値を表示しますか?
thelaws

実際に表示する必要があるだけです
testndtv

回答:


189

ほとんどの言語と同様に、形式は

%.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

13
iOSでは、私が使用していたsetPositiveFormat:ので、setFormat:この方法は、(Macのみのために定義されて)存在していなかったが、それでも-偉大な答えは、私の実験の時間を保存し、その1、あなたに大きな感謝:)
FurloSK

1
1つの問題:丸めないが切り捨てられる。おそらく、質問者から提供された入力値をコードで使用すると、結果は彼が期待したもの(22.37)ではなく、むしろ(22.36)になります。
James Bush、

しかし、それをさらに計算するために使用することはできません
Parag Bafna 2017

70

以下のコードを使用して、小数点以下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)

2
Swift 4で:str = String(describing:formatter.string(from:12.2345)!)
yehyatt

結果の22.36の値で6から7に増加しないことは可能ですか?
Shahbaz Akram 2017

@ShahbazAkramはい。roundingModeはよく例えば、NSNumberFormatterRoundDown、NSNumberFormatterRoundHalfDownなど、他の多くのオプションを持っている
アブドゥルラフマンMubeenアリ

30
 value = (round(value*100)) / 100.0;

5
私はこれが最も正しい答えであると信じています-彼はそれを丸めるように求めました-最後に文字列に変換しないでください(または後で二重に二重変換します)。
Martin Kovachev 2016




6

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

4

私はジェイソンの答えで行くつもりでしたが、私のバージョンのXcode(4.3.3)ではそれができないことに気付きました。少し調べたところ、最近クラスのメソッドが変更され、古いメソッドがすべて削除されたことがわかりました。だからここに私がそれをしなければならなかった方法があります:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];

[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);

2

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;
}

2

Swiftの場合、Foundationをインポートできない、round()を使用できない、文字列が不要な場合の簡単な解決策があります(通常、プレイグラウンドにいる場合)。

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

結果:31.726


1

Umberto Raimondi 拡張タイプDouble によって投稿されたソリューションを使用します。

extension Double {
    func roundTo(places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

0

あなたはこれを行うことができます:

NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.