2
void RoundOffTest(倍数)
{
    // この出力を取得するために RoundOffTest() に渡す値:
    // BEFORE number=1.785000 round=178.000000 (切り捨て)
    // AFTER NUMBER=1.785000 round=179.000000 (切り上げ)
    ///
    // 丸められているようです。
    // しかし、2 行目は切り上げているようです。
    // それは不可能ですか? あなたが渡すことができる可能性のある数はありませんか?
    // この関数で、その出力を確認しますか? それともありますか?

    NSLog(@"BEFORE number=%f round=%f (切り捨て)", number, round(number * 100));
    double NUMBER = 1.785000;  
    NSLog(@"AFTER NUMBER=%f round=%f (切り上げ)", NUMBER, round(NUMBER * 100));

}
4

1 に答える 1

0

に設定numberする1.7849995と、表示される結果が得られます。%fは小数点以下 6 桁を出力し、出力はその桁数に丸められることに注意してください。そのため、機能し1.7849994ません。

丸めなしの書式設定

コメントの質問に答えるには: を使用しますNSNumberFormatter。私はすべてのprintfスタイルフォーマッターがラウンドしていると思います。NSNumberFormatter7 つの異なる丸めモードを提供します。テスト関数の修正版は次のとおりです。

void RoundOffTest(double number)
{
    NSNumberFormatter *formatter = [NSNumberFormatter new];
    [formatter setFormat:@"0.000000"];  // see docs for format strings
    [formatter setRoundingMode:NSNumberFormatterRoundFloor]; // i.e. truncate
    NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithDouble:number]];
    NSLog(@"%@\n", formatted);
    [formatter release];
}
于 2011-04-16T04:38:13.033 に答える