10
NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
NSString *temp = [format stringFromNumber:[NSNumber numberWithFloat:23.4451]];
NSLog(@"%@",temp);

小数第6位を小数第2位に四捨五入する必要があります。iOSでは、上記のコードを試しました。23.45と入力すると23.5と答えますが、23.445と入力すると23.44と答えます。

誰かがiOSで「切り上げ」を片付けることができますか。

4

1 に答える 1

20

興味深いことに、少なくとも私にとっては、これfloat の精度の問題です。rdelmar がコメントで示唆したように。

この問題は、少なくともこの精度レベルでは、double を使用することで回避できます。例えば:

NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
[format setMinimumFractionDigits:2];

// With Float:
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithFloat:23.445]]); // Float
// Logs 23.44
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithDouble:23.445]]); // Double
// Logs 23.45

だから、あなたは悪いコードに悩まされていたのではなく、不正確な変数に苦しんでいました.

于 2012-09-06T08:29:29.250 に答える