BloveSaga

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            34 隨筆 :: 12 文章 :: 122 評(píng)論 :: 0 Trackbacks

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

          ?????? blovesage寫下這段代碼我們期望得到應(yīng)該找回的零鈔0.90,但是當(dāng)運(yùn)行后他發(fā)現(xiàn)數(shù)據(jù)不兌,運(yùn)行結(jié)果為:0.8999999999999999,與預(yù)期的0.90不一樣。為什么呢?搞了半天原因在于1.1這個(gè)數(shù)不能被精確的表示為一個(gè)double,因此被表示為最接近它的double值.該程序從2中減去這個(gè)值得.遺憾的是,這個(gè)結(jié)果打印出來并不是接近0.9的double值.這說明: 并不是所有的小數(shù)都可以用二進(jìn)制浮點(diǎn)數(shù)精確表示.二進(jìn)制浮點(diǎn)對(duì)于貨幣計(jì)算是非常不適合的.
          ????? 要解決這個(gè)問題有兩個(gè)辦法:一是使用某種整數(shù)類型,例如int或long,并且分單位來計(jì)算.如下:
          System.out.println((200-110)+"fen");
          結(jié)果為90分.二是使用執(zhí)行小數(shù)運(yùn)算的BigDecimal.它還可以通過JDBC與SQL DECIMAL類型進(jìn)行互操作.這里需要注意的是: 一定要用BigDecimal(String)構(gòu)造器,而千萬不要用BigDecimal(double).后一個(gè)構(gòu)造器將用它的參數(shù)值來創(chuàng)建一個(gè)實(shí)例.例如new BigDecimal(.1),它將返回一個(gè)BigDecimal,也即0.10000000000000000555111512312578270211815834041015625.正確使用我們就可以得到期望的結(jié)果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 藍(lán)色Saga 閱讀(134) 評(píng)論(0)  編輯  收藏 所屬分類: 希哈爪哇

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 呼玛县| 万宁市| 寻乌县| 新龙县| 尉氏县| 鹿泉市| 资溪县| 三河市| 辽源市| 抚州市| 民乐县| 政和县| 于都县| 石门县| 蒲城县| 区。| 东乡族自治县| 东阿县| 禹城市| 温州市| 抚松县| 南皮县| 淳化县| 蒙山县| 芜湖市| 桃园市| 长宁县| 武宣县| 郎溪县| 中超| 古浪县| 安阳县| 桑日县| 交口县| 陕西省| 焉耆| 沂南县| 工布江达县| 阳山县| 贵阳市| 云龙县|