2012-03-14 10 views
1

母国語が小数点ではなくカンマを使用する顧客をサポートしようとしていますが、動作するはずのメソッドを作成しましたが、 NSLocaleを値にカンマを生成するように設定します。ここでの方法である:NSDecimalNumberを数値でカンマを生成するNSLocaleでテストする方法

-(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; 
} 

しかし、出力は常にようである:それはdescriptionWithLocaleはバグがあり、それが正常に動作していないことが表示されます

1.67

+0

1.67を生産コールは次のとおりです。 [自己localNumber:1.66666小数点:2] –

答えて

2

。私は、 "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

+0

私はちょうどそれをテストし、それは正常に働いた。 :)あなたがリンクしている問題の問題は、倍精度で表現する精度がないという値の四捨五入についてです。そしてもちろん、彼はとにかくダブルで始まっているので、精度はこのルーチンでは問題にならないでしょう。 – lnafziger

+0

完璧に動作します!ありがとう! –

関連する問題