簡體   English   中英

四舍五入問題+ iOS

[英]Round off Issue + ios

在我的應用程序中,我有一個金額字段。 在金額字段中,用戶可以在小數點后輸入任意位數。 但是當我保存它時,它想四舍五入到兩位數。 這種情況下與我的代碼正常工作。 使用我的代碼,如果用戶輸入值2.445,則將其另存為2.45。 同樣
2.115-> 2.12,
2.125-> 2.13,
2.135-> 2.14,
2.145-> 2.15,
2.155-> 2.16,
2.165-> 2.17,
2.175-> 2.18 如果用戶輸入為2.185,則在這種情況下,我需要另存為2.19,但僅將其保存為2.48。 並且如果輸入為2.195,則應將其另存為2.20,但僅將其另存為2.19。如何解決此問題? 我已附上我的代碼。

float Rate_int = [AmountValue floatValue];

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

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:Rate_int]];

簡而言之,如果第三個數字大於或等於5,我想在所有情況下都進行四舍五入。但是2.185不會四舍五入到2.9。同樣,2.195也不會四舍五入到2.20。問題只在這兩種情況下..

使用%.2f

NSString *strNum = [NSString stringWithFormat:@"%.2f",2.185];
NSLog(@"%@",strNum);

或最多小數位

 float roundToTwo (float num)
{
    return round(100 * num) / 100;
}

2.185不能完全表示為二進制浮點數。 對於精確的十進制算術,應避免使用floatdouble ,而應使用NSDecimalNumber

NSString *AmountValue = @"2.185";
NSDecimalNumber *decnum = [NSDecimalNumber decimalNumberWithString:AmountValue];

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

NSString *numberString = [formatter stringFromNumber:decnum];
// gives "2.19"

這是一個浮點精度問題。 您可以通過使用double而不是float來避免此問題。

    double Rete_int =  [AmountValue doubleValue];
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [formatter setRoundingMode: NSNumberFormatterRoundHalfUp];
    [formatter setMaximumFractionDigits:2];
    [formatter setMinimumFractionDigits:2];

    NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithDouble:Rete_int]];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM