簡體   English   中英

目標C:獲取正確的浮點值(合理)

[英]Objective C : Get correct float values(justified)

我做了很多工作,卻找不到解決方案。 甚至標題也無法清楚解釋。

我有三個值,重量,數量和總計

我做了以下

float wq = [[weightarray objectAtIndex:selectedint]floatValue];
float q = [quantity floatValue];
float total = wq * q;

例如,如果

[weightarray objectAtIndex:selectedint] = @"3.14";
quantity = 4;

那么結果是

wq = 3.140000  q= 4.000000 total = 12.560000

但是我需要

wq = 3.14 total = 12.56   

該怎么辦? 我搜索了很多,有人建議使用NSDecimal,

NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:FALSE raiseOnOverflow:TRUE raiseOnUnderflow:TRUE raiseOnDivideByZero:TRUE];

但此處的小數位數不是2,因此wq值在點后可能有3或4個數字。

如果總數= 2.30000100表示​​我需要總數= 2.300001怎么解決?

我不確定您要的是什么,但似乎您只希望這些值僅顯示2 dp,在這種情況下,您可以使用如下字符串格式:

    NSString *output = [NSString stringWithFormat:@"float = %.2f", 3.14];

.2指定浮點數應調整為2 dp

希望這可以幫助

可能有更直接的方法來實現它(我不知道),但這是一個建議...

  1. 就像已經轉換為字符串一樣。
  2. 使用[myString hasSuffix:@"0"]查看它是否以零結尾。
  3. 使用[myString substringToindex:[myString length]-1]創建一個沒有最后零的新字符串。
  4. 重復。

我知道這並不優雅,但是除非有人有更好的解決方案,否則這至少會做您想要的。

更新:從頭開始-我剛剛發現了[myString stringByTrimmingCharactersInSet:set] 當然這必須是您所需要的...?

終於找到了解決方案,多虧了馬丁

float total = 12.56000;
NSString *s = [NSString stringWithFormat:@"%f", total];
NSLog(@"%@",s);
BOOL success;
success =NO;
while(!success)
{
    if ([s hasSuffix:@"0"])
    {
       s = [s substringWithRange:NSMakeRange(0,[s length]-1)];
    }
    else if ([s hasSuffix:@"."])
    {
        s = [s substringWithRange:NSMakeRange(0,[s length]-1)];
        success = YES;
    }
    else
        success = YES;
}
NSLog(@"%@",s);

如果total = 12.560000,則返回total = 12.56

如果total = 12.000000,則返回total = 12

如果total = 10.000000,則返回total = 10

如果total = 12.3000100,則返回total = 12.30001

暫無
暫無

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

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