目标C:获取正确的浮点值(对齐)

时间:2013-02-08 10:39:59

标签: iphone ios objective-c ios6 nsdecimalnumber

我在其中工作了很多,无法找到解决方案。即使标题也无法解释清楚。

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

我做了以下

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 怎么解决这个?

3 个答案:

答案 0 :(得分:3)

我不完全确定你的要求是什么,但好像你希望这些值只显示2 d.p.在这种情况下,您可以使用如下字符串格式:

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

.2指定浮点数应合理为2 d.p。

希望这有帮助

答案 1 :(得分:2)

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

  1. 转换为您已经完成的字符串。
  2. 使用[myString hasSuffix:@"0"]查看它是否以零结尾。
  3. 使用[myString substringToindex:[myString length]-1]创建一个没有最终零的新字符串。
  4. 重复。
  5. 我知道它并不优雅,但除非有人有更好的解决方案,否则这至少会做你想要的。

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

答案 2 :(得分: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