値22.8は、バイナリフローティングポイントで正確に表すことはできません。あなたが見ているのは、ディスプレイ形式に基づいた表現です。異なるディスプレイメソッドは、異なるディスプレイ形式を使用する場合があります。異なる数字数と丸めを表示すると、22.8と22.7999999の両方が、丸め後に表示される数字の数が正しいことを意味します。 22.7999999が表示され、22.8000000ではなく表示されたことに注意してください。次の数字が2であるため、表示された値は丸められています。
これはベースに依存します。つまり、1つの数字で正確にできるものは、異なる数のベースで正確になることができない場合があります。この場合、10進数ベースの22.8は、バイナリ数ベースで正確ではありません。
これが、nsdecimalが存在する理由であり、理由が金銭的価値に使用されない理由です。
これは、ベース10進数でPIの値を表示することと多少相当します。数字の数は無限であるため、表示する桁数を決定したすべてのディスプレイでは、表示されます。興味深いことに、PIはPI番号ベースで正確に(しかし有用に)表現できます。 :-)
の場合 float
と double
表現できる桁数の有限数があります。