BloveSaga

          在希臘帕爾納斯山南坡上,有一個馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個大字: 認識你自己!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            34 隨筆 :: 12 文章 :: 122 評論 :: 0 Trackbacks

          ?????blovesaga在一家小超級市場購買一個1.10元棒棒糖,但是他的錢報中都是兩塊一張的鈔票.如果他用一張兩塊的鈔票買這個棒棒糖,那么應該找給他多少零錢呢?
          ???? 編寫一個程序解決這個問題.
          code:
          class Change
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println(2.00-1.10);
          ?}
          }

          ?????? blovesage寫下這段代碼我們期望得到應該找回的零鈔0.90,但是當運行后他發現數據不兌,運行結果為:0.8999999999999999,與預期的0.90不一樣。為什么呢?搞了半天原因在于1.1這個數不能被精確的表示為一個double,因此被表示為最接近它的double值.該程序從2中減去這個值得.遺憾的是,這個結果打印出來并不是接近0.9的double值.這說明: 并不是所有的小數都可以用二進制浮點數精確表示.二進制浮點對于貨幣計算是非常不適合的.
          ????? 要解決這個問題有兩個辦法:一是使用某種整數類型,例如int或long,并且分單位來計算.如下:
          System.out.println((200-110)+"fen");
          結果為90分.二是使用執行小數運算的BigDecimal.它還可以通過JDBC與SQL DECIMAL類型進行互操作.這里需要注意的是: 一定要用BigDecimal(String)構造器,而千萬不要用BigDecimal(double).后一個構造器將用它的參數值來創建一個實例.例如new BigDecimal(.1),它將返回一個BigDecimal,也即0.10000000000000000555111512312578270211815834041015625.正確使用我們就可以得到期望的結果0.90:
          code:
          import java.math.BigDecimal;
          class Change
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println(new BigDecimal("2.00").
          ???????????????????? subtract(new BigDecimal("1.10")));
          ?}
          }
          Print:
          F:\Java Develop>java Change
          0.90

          ?

          posted on 2006-06-04 15:54 藍色Saga 閱讀(127) 評論(0)  編輯  收藏 所屬分類: 希哈爪哇

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 大冶市| 武安市| 博野县| 江华| 莱阳市| 佛教| 读书| 万全县| 锡林浩特市| 台前县| 隆昌县| 海丰县| 溧阳市| 土默特右旗| 芷江| 札达县| 梅州市| 扎赉特旗| 同仁县| 中山市| 融水| 佛冈县| 彭阳县| 万年县| 和平区| 从化市| 轮台县| 年辖:市辖区| 绩溪县| 三亚市| 天全县| 泾川县| 多伦县| 泰宁县| 衡东县| 淅川县| 栾川县| 阳朔县| 宜都市| 甘南县| 卓资县|