2012-03-14 26 views
1

我试图支持其母语使用逗号而不是小数点的客户,并且我创建了一种我认为应该可以工作的方法,但是我一直无法设置一个NSLocale在值中产生逗号。下面是方法:如何使用产生逗号的NSLocale测试NSDecimalNumber号码

-(NSString *)localNumber:(double)d decimals:(int)n{ 

    NSLocale *deLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"fr"]; 

    NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%4.*f", n, d]]; 
    NSString *dnS = [dn descriptionWithLocale:deLoc]; 

    return dnS; 
} 

但产量始终是这样的:

1.67

+0

产生1.67呼叫: [自localNumber:1.66666小数:2] – 2012-03-14 15:29:50

回答

2

看来,descriptionWithLocale有缺陷,它不能正常工作。我确认了“fr”语言环境的小数分隔符确实是逗号,但它使用的是句号。

不管怎么说,这是一个办法做到这一点:

-(NSString *)localNumber:(double)d decimals:(int)n{ 
    NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%4.*f", n, d]]; 

    NSLocale *deLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"fr"]; 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setLocale:deLoc]; 
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
    NSString *dnS = [formatter stringFromNumber:dn]; 

    return dnS; 
} 
+0

你确定这是'NSDecimalNumber'要去工作?看问题http://stackoverflow.com/questions/9385783/ios-formatting-decimal-numbers/9385920#9385920。 – Sulthan 2012-03-14 16:59:48

+0

我只是测试它,它工作正常。 :)你所链接的问题中的问题是关于舍入double的值没有精确度来表示的问题。当然,他无论如何都是以双重身份开始的,所以精确度不会成为这个例程的问题。 – lnafziger 2012-03-14 17:00:52

+0

完美的作品!谢谢! – 2012-03-14 17:48:07