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)); }
1 に答える
0
に設定number
する1.7849995
と、表示される結果が得られます。%f
は小数点以下 6 桁を出力し、出力はその桁数に丸められることに注意してください。そのため、機能し1.7849994
ません。
丸めなしの書式設定
コメントの質問に答えるには: を使用しますNSNumberFormatter
。私はすべてのprintf
スタイルフォーマッターがラウンドしていると思います。NSNumberFormatter
7 つの異なる丸めモードを提供します。テスト関数の修正版は次のとおりです。
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 に答える