dポイントプレゼントキャンペーン実施中!

Swiftの初心者です。
Playgroundで画像のようなDouble型の値を小数第2位で四捨五入するプログラムを書いて見たのですが、最初の行で"9491.299"を入れているはずなのに、右の結果では"9491.299000000001"となっている上に、四捨五入できていません。
この原因とどのようにすれば四捨五入できるのかを教えてください。

「SwiftのDouble型の四捨五入につ」の質問画像

A 回答 (3件)

既出のように浮動小数点数の特性です。



「9491.299」と「9491.299000000001」はデータ上同じものです。
これを「9491.299000000001」でなく「9491.299」と表示したいとなると、最悪で2進1000桁を超す演算を行う面倒なプログラムになります。
普通はそのような面倒はしないので、入力した10進数とわずかに異なる表示が出ることを許容して使います。

四捨五入は、正しく行うのは不可能です。
今回は偶然正しい答えが出ていますが、浮動小数点数の小数点以下での四捨五入はどんな場合にも正しい答えが出るとは限りません。
まれに誤った答えが出ることを許容して使うか、あるいは整数だけを使うかするとよいでしょう。
    • good
    • 0
    • good
    • 0

これはSwiftに限らず,プログラムで浮動小数点を取り扱う場合には起こりえます。


「浮動小数点 誤差」などで検索してみてください。
表示上はそのように表されていますが,
最初の行では8バイトで表すことが可能な最も9491.299に近い値が入っています。
同様に最後の行では最も9491.300に近い値です。
正しく四捨五入できていますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!