2012-02-26 21 views
2

私のビューには2つのテキストフィールドがあります。値を入力するようにユーザーに指示した後、私はfloatに変換して計算します。NSStringをfloatに変換すると不正確な値が生成される

私は次のコードを使用し、ユーザがtextField1で22.8を入力すると

variable1 = [textField1.text floatValue]; 
variable2 = [textField2.text floatValue];` 

を、私はvariable1に22.80005を取得します。

私は正確な値を得られません!

正確な10進値を取得するにはどうすればよいですか?加算は、計算の精度に影響する可能性があります。

答えて

6

浮動小数点精度についてもう一つの質問があります。

代わりNSDecimalNumberを使用する必要があります。

NSDecimalNumber *variable1 = [NSDecimalNumber decimalNumberWithString:[textField1 text]]; 
NSDecimalNumber *variable2 = [NSDecimalNumber decimalNumberWithString:[textField2 text]]; 

それはあなたがやっている計算に依存Number and Value Programming Guide.

3

浮動小数点数は、正確な値ではなく、推定値だけです。あなたはそのような偏差を得ることになっています。

3

でいくつかのより多くの情報があります。

通貨用NSDecimalNumberです。 他の計算の場合はfloatの代わりにdoubleを使用してください。精度問題は、数値が10進表記から2進表記に変換されるときに発生します。 doubleはより正確な精度を提供します(正確ではありませんがより正確です)。

コンピュータで正確な計算を行う方法はありますが、それらは複雑で、常にfloatまたはdoubleよりもはるかに遅いです。

+0

私は10進値を比較する必要があるアプリがあります。構造体は、値が文字列形式であり、文字列を浮動小数点数に変換するとき、精度は正確ではありません。たとえば、-0.123456を文字列からdoubleに変換すると-0.12345が返されますが、この場合は正確な値が必要です。 – madLokesh

+0

通常、正確な値は通貨計算でのみ必要です。正確な数値は、_fixed point arithmetics_で得られます(基本的には、固定長の小数点以下を使って 'long long'または' long long'を使用します)。あるいは、そのために設計された 'NSDecimalNumber'を使うことができます。 – Sulthan

+0

実際に値は小数点以下の桁で変化し、いくつかは6個、あるものは9個、あるものは5個などあります。 – madLokesh

関連する問題