1

私がやろうとしていることは非常に単純ですが、結果にはエラーが表示されます。

    float x = 423.36;
    NSLog(@"%f", x);
    NSLog(@"%.2f", x*17719);

結果:

2012-11-12 11:19:02.096 test[2917:907] 423.359985
2012-11-12 11:19:02.098 test[2917:907] 7501515.50
  • 最初の質問:最初のNSLogで小数部が変更されていますが、どうすればそのまま維持できますか?
  • 2番目の質問:小数が変わるため、乗算プロセスは不正確な積になります。

電卓で計算すると、7501515.84が得られます。これが、アプリで取得したいものです。

何か案は ?前もって感謝します!ロイ。

4

2 に答える 2

3
  1. floatタイプが任意の数値を正確に表すことができないため、小数点が変わります。フロートで利用できる精度には限りがあります。発見した正確な理由に注意する必要があります。これらの数値は、警告なしに変更される可能性があります。

  2. これは実際には問題ではありませんが、最善を尽くします。あなたがやりたいことは、数学を行うために任意の(または少なくともより高い)精度の10進数を表す方法を見つけることだと思います。幸いなことに、iOS SDKには答えがあります。NSDecimalNumberクラスは、最大38桁の長さmantissa * 10 ^ expで、として表現できる任意の数値を処理できるようにします。mantissaそのクラスリファレンスを調べて、既存の数学を移植して使用できるかどうかを確認してください。

あなたがそれをしている間、これはあなたが発見したような問題を扱っている浮動小数点ガイドを読むのに絶好の機会でしょう。

于 2012-11-12T16:26:58.477 に答える
2

フロートは誰にとっても不正確なので、使用しないでください。ダブルスを使用する

于 2012-11-12T16:27:07.937 に答える