-1

我在这方面做了很多工作,但找不到解决方案。连标题都无法解释清楚。

我有三个值重量,数量和总计

我做了以下

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];

但是这里的 scale 不是 2,wq 值可能有 3 或 4 个数字。

如果总 = 2.30000100 意味着我需要总 = 2.300001 如何解决这个问题?

4

3 回答 3

3

我不完全确定您的要求是什么,但似乎您希望这些值仅显示 2 dp 在这种情况下,您可以使用如下字符串格式:

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

.2 指定浮动应调整为 2 dp

希望这可以帮助

于 2013-02-08T11:06:56.490 回答
2

可能有更直接的方法来实现它(我不知道)但这里有一个建议......

  1. 像你已经做的那样转换为字符串。
  2. 用于[myString hasSuffix:@"0"]查看它是否以零结尾。
  3. 用于[myString substringToindex:[myString length]-1]创建没有最后一个零的新字符串。
  4. 重复。

我知道这并不优雅,但除非有人有更好的解决方案,否则这至少可以满足您的需求。

更新:从头开始-我刚刚发现[myString stringByTrimmingCharactersInSet:set]。当然这一定是你需要的......?

于 2013-02-08T11:34:31.860 回答
0

终于找到解决方案了,感谢 Martin

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);

如果总计 = 12.560000 它返回总计 = 12.56

如果总计 = 12.000000 它返回总计 = 12

如果总计 = 10.000000 它返回总计 = 10

如果总计 = 12.3000100 它返回总计 = 12.30001

于 2013-02-08T12:34:20.557 回答