2013-01-07 69 views
0

我试图作出这样123456.567数是这样123,456.56对美元和123,456.567任何其他货币格式的数字显示千位和十进制分隔

我的代码是:

double fromAgainstJOD = amountVal * fromCurrency.SellRate; 
double result = fromAgainstJOD/toCurrency.SellRate; 

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setGroupingSeparator:@","]; 
[formatter setGroupingSize:3]; 
[formatter setUsesGroupingSeparator:YES]; 

NSString* formattedString = [formatter stringFromNumber:[NSNumber numberWithDouble:result]]; 

if (toCurrency.SellRate == 0) { 
    result = 0; 
} 
if ([toCurrency.Code isEqualToString:@"USD"]) { 
    [resultLbl setText:[NSString stringWithFormat:@"%@ %0.2f", toCurrency.Code, result]];  
} else { 
    [resultLbl setText:[NSString stringWithFormat:@"%@ %0.3f", toCurrency.Code, result]]; 
} 

所以我想在resultLbl中为每个货币代码设置千位分数和小数部分的数字。 USD => 2分数 其他货币=> 3分数

+0

浮点数不应该被使用。仅仅因为它在你的测试中有效,并不意味着它总是正确的!请参阅:blog.plataformatec.com.br/2014/09/floating-point-and-currency – Qualcuno

+0

对于任何货币,请勿使用double。使用小数类型,它是正确的格式。双格式会在操作过程中造成金钱流失。 – NCFUSN

+0

这对我工作正常,所以美元的结果是7384.550,但我需要的是显示它为7,384.550 如果我想改变为nsnumber我不能显示它为7,384.550它显示为7,384.55 –

回答

0

我弄清楚如何与钱打交道时做

if ([toCurrency.Code isEqualToString:@"USD"]) { 
    [formatter setFormatWidth:2]; 
    formatter.maximumFractionDigits = 3; 
    formatter.minimumFractionDigits = 3; 
    formattedString = [formatter stringFromNumber:[NSNumber numberWithDouble:result]]; 

    [resultLbl setText:formattedString]; 
}else 
{ 
    [formatter setFormatWidth:3]; 
    formatter.maximumFractionDigits = 2; 
    formatter.minimumFractionDigits = 2; 
    formattedString = [formatter stringFromNumber:[NSNumber numberWithDouble:result]]; 
    [resultLbl setText:formattedString]; 
} 
1

下面是修复方法。在你格式化你在哪里检查您的美元或其他,如果美元设置formatWidth至2,否则设置为3

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setGroupingSeparator:@","]; 
[formatter setGroupingSize:3]; 
[formatter setUsesGroupingSeparator:YES]; 

NSString* formattedString; 

if (toCurrency.SellRate == 0) { 
    result = 0; 
} 
if ([toCurrency.Code isEqualToString:@"USD"]) { 
    [formatter setFormatWidth:2]; 
    formattedString = [formatter stringFromNumber:[NSNumber numberWithDouble:result]]; 
    [resultLbl setText:[NSString stringWithFormat:@"%@ %0.2f", toCurrency.Code, result]];  
}else 
{ 
    [formatter setFormatWidth:3]; 
    formattedString = [formatter stringFromNumber:[NSNumber numberWithDouble:result]]; 
    [resultLbl setText:[NSString stringWithFormat:@"%@ %0.3f", toCurrency.Code, result]]; 

} 

它看起来像setFormat出现,即使它不工作的IOS文件。

样品来自:

NSNumberFormatter *numberFormatter =[[NSNumberFormatter alloc] init]; 
NSMutableDictionary *newAttrs = [NSMutableDictionary dictionary]; 

[numberFormatter setFormat:@"$#,##0.00;($#,##0.00)"]; 
[newAttrs setObject:[NSColor redColor] forKey:@"NSColor"]; 
[numberFormatter setTextAttributesForNegativeValues:newAttrs]; 
[[textField cell] setFormatter:numberFormatter]; 

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSNumberFormatter_Class/Reference/Reference.html

+0

没有这样的事情as setFormat !!! –

+0

有条件地设置setFormatWidth解决了我的问题。奇怪的是,苹果的文档只使用setFormat。对不起,这个错误。 – propstm

+0

谢谢你的帮助 –

相关问题