私は NSNumberFormatter と深刻な論争を抱えており、その広範なドキュメントを調べた後でも、遭遇した非常に単純な問題に頭を悩ませることができませんでした. 皆さんが私を助けてくれることを願っています。
私が持っているもの:NSDecimalNumber
で表示される計算結果を表すUITextField
必要なもの: その結果の科学的表記。
私がやっていること:
-(void)setScientificNotationForTextField:(UITextField*)tf Text:(NSString*)text {
NSString* textBefore = text;
// use scientific notation, i.e. NSNumberFormatterScientificStyle
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
//[formatter setGeneratesDecimalNumbers:YES];
[formatter setNumberStyle:NSNumberFormatterScientificStyle];
NSDecimalNumber* number = (NSDecimalNumber*)[formatter numberFromString:text];
tf.text = [number descriptionWithLocale:[[Utilities sharedUtilities] USLocale]];
NSString* textAfter = tf.text;
// DEBUG
NSLog(@"setScientificNotation | text before = %@, text after = %@", textBefore, textAfter);
[formatter release];
}
何が起こるか:
特定の結果が 0.0099 になる場合があります。textBefore
その正しい値を保持します。フォーマッタに 10 進数を生成するように指示しないと (上記のスニペットでコメントアウトされています)、NSDecimalNumber から NSNumber が作成され、偽の結果が生成され、0.009900000000000001 になりますtextAfter
。 NSDecimalNumber.
NumberFormatter に小数を生成するように指示しても、それでも間違った結果が作成されます。さらに、指数表記 (例: "1.23456e-10") を挿入する前に、完全な 10 進数を生成 (したがって表示) しますが、これは私が望むものではありません。
繰り返しますが、フォーマッタで NSDecimalNumber を使用するようにしたいので、'
クラスの使い方が間違っていますか?ドキュメントを誤解しましたか?なぜこれが起こるのか、どうすれば私が望む動作を作成できるのかを誰かが説明できますか? もちろん、何かを見つけたら、調査を続けて更新します。