60943


お世話になります。

[code]

    double d = 344.328;
    d *= 10000;
    
[/code]

こういったことをしているのですが、通常なら3443280になるところが、何度実行しても  
344327.9999.....といった数になってしまうのですが、これはどうしてなのでしょうか。

原因と対策を教えてください。

よろしくお願いいたします。

[![画像の説明をここに入力](https://i.stack.imgur.com/NRYvV.jpg)](https://i.stack.imgur.com/NRYvV.jpg)


CC BY-SA 4.0
2019-11-29T07:16:01.950
60942
2019-11-29T12:29:39.147
2019-11-29T12:29:39.147
2376
9374
question
c#
C# double型の計算について


浮動小数点数は正確な小数表現ではありません。

[code]

    double d = 344.328;
    
[/code]

は`344.328`を`double`で表せる最も近い値として扱われます。そのため最小限の誤差があります。その上で

[code]

    d *= 10000;
    
[/code]

により誤差が10000倍に拡大します。その結果、質問のような状況が発生します。  
正確な小数表現で演算したい場合は`decimal`を使用します。


CC BY-SA 4.0
2019-11-29T07:43:53.340
60943
2019-11-29T07:43:53.340
4236
60942
answer