double
近づきますが、1/10を2進数で正確に表すことはできません(とにかく、IEEE浮動小数点表記を使用します)。
本当に興味がある場合は、すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを確認できます。別のSOスレッドから恥ずかしそうに盗まれたリンク。
簡単で汚い説明は、浮動小数点が2の小数乗(1 / 2、1 / 4、1 / 8、...)を表すビットでバイナリに格納されることです。これらの分数を正確に1/10に合計する数学的な方法はないため、0.1をIEEE浮動小数点表記で正確に表すことはできません。
double
基数の前後により多くの数字を与えることによって数値の精度を拡張しますが、これを補うことができる方法で2進数の形式を変更することはありません。おそらく、後のどこかで余分なビットを取得するでしょう。
参照:
および他の同様のスレッド。
私が仕事から家に帰るドライブで熟考したさらなる拡張:これを処理できる1つの方法は、すべての金銭的価値をセントで(intとして)表し、データを表示するときにdollars.cents形式に変換することです。変換時に整数除算の切り捨てを利用できるため、これも実際には非常に簡単です。
int interest, dollars, cents;
interest = 16034; //$160.34, in cents
dollars = value / 100; //The 34 gets truncated: dollars == 160
cents = value % 100; //cents == 34
printf("Interest earned to date: $%d.%d\n", dollars, cents);
Objective-Cはわかりませんが、このCの例も理にかなっていると思います。繰り返しますが、これはそれを処理するための1つの方法にすぎません。また、データを表示する必要があるときはいつでも文字列のフォーマットを行う関数を使用することで改善されます。
あなたは明らかにそれを行うためのあなた自身の(さらに良い!)方法を思い付くことができます、しかし多分これはあなたが始めるのを助けるでしょう。他に誰か提案があれば、私も聞いてみたいです!