none
變數宣告問題? RRS feed

  • 問題

  • 各位大大好:
     目前出現一個怪異的狀況,我宣告兩個變數,都是double,給值1390*0.35 出來的數字是486.499999999994
    怎會這樣?不是486.5嗎?哪位大大可以告訴我呢?
    2009年4月24日 上午 07:36

解答

  • 如果你只是要輸出,用格式化字串方法即可得解。

    double v = 486.499999999994;
    string vs = v.ToString("0.0"); // output: 486.5

    不過如果你是用來計算,且要求很高精確度,那你還是乖乖改用 decimal 吧 ...
    小人物一枚。
    • 已標示為解答 FLY007 2009年4月24日 上午 10:37
    2009年4月24日 上午 09:08
    版主
  • 到網路上找大數運算的類別也可以
    大數運算本身就是不使用浮點數,所以這種問題就可以得到解析解而不是近似解了。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 FLY007 2009年4月27日 上午 01:20
    2009年4月24日 下午 12:12

所有回覆

  • 這是浮點數精確度問題

    參考
    http://tinyurl.com/cwe7c6

    http://www.dotblogs.com.tw/larrynung/
    2009年4月24日 上午 07:39
  • 請問大家如何避免這種情況,不想全部宣告decimal。謝謝!!
    2009年4月24日 上午 08:44
  • 如果你只是要輸出,用格式化字串方法即可得解。

    double v = 486.499999999994;
    string vs = v.ToString("0.0"); // output: 486.5

    不過如果你是用來計算,且要求很高精確度,那你還是乖乖改用 decimal 吧 ...
    小人物一枚。
    • 已標示為解答 FLY007 2009年4月24日 上午 10:37
    2009年4月24日 上午 09:08
    版主
  • 謝謝小朱大大。
    2009年4月24日 上午 10:37
  • 到網路上找大數運算的類別也可以
    大數運算本身就是不使用浮點數,所以這種問題就可以得到解析解而不是近似解了。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 FLY007 2009年4月27日 上午 01:20
    2009年4月24日 下午 12:12