衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

BigDecimal實際開發的三坑是什么

汽車電子技術 ? 來源:程序猿知秋 ? 作者:知秋 ? 2023-02-16 14:39 ? 次閱讀

坑1:初始化使用double類型數據

public class TestBigDecimal {
    public static void main(String[] args){
        BigDecimal b1=new BigDecimal(0.22);
        BigDecimal b2=new BigDecimal("0.22");
        System.out.println("b1的值:"+b1);
        System.out.println("b2的值:"+b2);
    }
}

結果

b1的值:

0.2200000000000000011102230246251565404236316680908203125

b2的值:0.22

原因:

構造方法參數為double類型有一定的不可預知性,表面上看是0.22,實際上是0.2200000000000000011102230246251565404236316680908203125,0.22在java中無法準確的表示為double

解決方案:

1.采用String 類型的構造參數。

2.如果必須要使用double,則可使用Double.toString(double) 方法轉換成String, 再采用Bigdecimal的構造函數.

坑2:除法計算

public static void t1(){
    BigDecimal b1=new BigDecimal("10");
    BigDecimal b2=new BigDecimal("3");
    System.out.println(b1.divide(b2).setScale(2,BigDecimal.ROUND_HALF_UP));
}

結果:

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

原因:

當遇到除不盡的情況時,會報以上錯誤

解決方案:

System.out.println(b1.divide(b2,2,BigDecimal.ROUND_HALF_UP));

坑3:equals方法

public static void t2(){
    BigDecimal b1=new BigDecimal("0.0");
    BigDecimal b2=BigDecimal.ZERO;
    System.out.println(b1.equals(b2));
}

結果:

false

原因:

BigDecimal 的equals 方法不僅僅是比較值,還會比較scale的位數是否相等,而Bigdecimal.ZERO的scale是0,所以為 false

解決方案:

使用compareTo方法. System.out.println(b1.compareTo(b2)==0)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 參數
    +關注

    關注

    11

    文章

    1860

    瀏覽量

    32430
  • Doubler
    +關注

    關注

    0

    文章

    7

    瀏覽量

    7209
  • string
    +關注

    關注

    0

    文章

    40

    瀏覽量

    4748
收藏 人收藏

    評論

    相關推薦

    R128點屏踩筆記

    本文所整理的R128點屏踩筆記均是在參考以下應用開發案例進行屏幕適配時遇到的實際開發問題,涵蓋了屏幕花屏、屏幕白屏、LVGL顯示顏色錯誤等常見問題的解決方法。
    的頭像 發表于 12-03 10:17 ?1455次閱讀
    R128點屏踩<b class='flag-5'>坑</b>筆記

    死創業者的硬件產品——“十大

    死創業者的硬件產品——“十大”第一:錯把產品原型當批量生產第二:以為可以修補bug;第
    發表于 11-14 15:59

    NodeMCU開發板踩經歷分享

    寫在前面今天入手了一個NodeMCU的板子,準備學習一下物聯網相關的知識。不過由于博主學藝不精,在第一步燒寫固件上就踩了,所以就想著把自己的踩經歷寫出來分享給大家,希望能有一些幫助~ 材料準備硬件:NodeMCU開發板*1(
    發表于 11-01 07:55

    mongoose開發中遇到的及解決方案

    1. 本文不對mongoose的功能作陳述,只記錄下自己開發中遇到的,及解決方案。嵌入了mongoose的代碼編譯通過,在調試運行(gdb)時候,卻發生了段錯誤(Segmentation fault),如下所示:...
    發表于 12-16 06:56

    大學時光、單片機開發,嵌入式網站推薦

    大學時光、單片機開發,嵌入式網站推薦
    發表于 11-20 11:51 ?8次下載
    入<b class='flag-5'>坑</b>大學時光、單片機<b class='flag-5'>開發</b>,嵌入式網站推薦

    關于藍橋杯單片機開發板矩陣鍵盤的一些

    關于藍橋杯單片機開發板矩陣鍵盤的一些
    發表于 11-23 17:36 ?2次下載
    關于藍橋杯單片機<b class='flag-5'>開發</b>板矩陣鍵盤的一些<b class='flag-5'>坑</b>

    ESP-32開發歷程()ESP-IDF 定時器使用

    ESP-32開發歷程()ESP-IDF 定時器使用前言一、開發基礎二、定時器使用1.官方描述2.讀入數據總結ESP-32開發
    發表于 12-08 12:06 ?13次下載
    ESP-32<b class='flag-5'>開發</b>踩<b class='flag-5'>坑</b>歷程(<b class='flag-5'>三</b>)ESP-IDF 定時器使用

    BigDecimal使用失誤的原因分析

    BigDecimal 自身也提供了很多構造器方法,這些構造器方法使用不當可能會造成不必要的麻煩甚至是金額損失,從而引起事故資損。
    的頭像 發表于 07-10 14:35 ?1007次閱讀

    軟件開發外包有哪些要注意?

    提起軟件開發外包,大家并不陌生,因為很多企業已經選擇了軟件外包,但是有人會說軟件開發外包就是個,千萬別選擇軟件外包。 ? 其實軟件外包是沒有問題的,問題出在選擇的軟件開發外包公司上面
    的頭像 發表于 10-11 18:36 ?1482次閱讀

    bigdecimal轉string類型

    BigDecimal轉換為String類型是在Java編程中常常遇到的一個問題。BigDecimal是Java中用于表示高精度十進制數的類,而String則是用于表示文本字符串的數據類型。在某些
    的頭像 發表于 11-30 11:09 ?6504次閱讀

    怎么把bigdecimal轉成string

    BigDecimal轉換為String是一項常見的任務,在Java的開發中經常會涉及到將數值進行格式化,并在不同的環境中傳遞。本文將詳解以下幾個方面的內容: 什么是BigDecimal
    的頭像 發表于 11-30 11:11 ?1455次閱讀

    bigdecimal轉string類型避免空指針

    在Java中,BigDecimal是用于處理高精度數字計算的類。它提供了一種有效的方法來避免使用浮點數的精確度損失問題。然而,在將BigDecimal對象轉換為String類型時,需要特別小心以避
    的頭像 發表于 11-30 11:12 ?2796次閱讀

    bigdecimal轉字符串保留兩位小數

    BigDecimals是Java中用于表示任意精度的十進制數的類。在許多應用程序中,可能需要將一個BigDecimal轉換為字符串并保留兩位小數。在本文中,我們將探討如何使用BigDecimal
    的頭像 發表于 11-30 11:18 ?4545次閱讀

    bigdecimal的加減乘除java

    BigDecimal是Java中提供的一個用于精確計算的類,它可以實現浮點數的精確加減乘除運算,避免了在使用浮點數進行計算時可能出現的舍入誤差。 首先,我們需要明確一點,浮點數在計算機中是以二進制
    的頭像 發表于 11-30 11:19 ?1523次閱讀

    bigdecimal是什么數據類型

    BigDecimal是Java編程語言中的一個類,用于表示任意精度的十進制數。它是在數值計算方面提供更高精度和更多功能的一個解決方案。常規的浮點數類型(如float和double)有精度限制,可能會
    的頭像 發表于 11-30 11:21 ?3189次閱讀
    百家乐官网技巧看路| 棋牌类玩具| 百家乐官网网络游戏信誉怎么样| 大发扑克下载| 澳门百家乐破解方法| 百家乐官网号论坛博彩正网| 太阳城大酒店| 澳门百家乐加盟| 百家乐官网园千术大全| 百家乐天下| 24山 分金 水口 论 吉凶| 365足球| 怎么玩百家乐网上赌博| 申扎县| 卓达太阳城希望之洲| 百家乐单跳双跳| 百家乐官网网站东方果博| 大发888私网开户| 金博士百家乐娱乐城| 狮威百家乐官网娱乐网| 苍溪县| 太阳城娱乐网可信吗| 海威百家乐赌博机| 百家乐官网讲谈| 百家乐官网路子分析| 大发888娱乐城怎么玩| 百家乐有人赢过吗| 在线百家乐官网合作| 博赢国际娱乐城| 威尼斯人娱乐场送18| 长乐坊百家乐娱乐城| 新锦江百家乐官网娱乐平台| 张家口市| 德州扑克哪个平台好| 巴黎人百家乐的玩法技巧和规则| 澳门百家乐自杀| 百家乐官网大转轮真人视讯| 张北县| 金都国际| 东方太阳城招聘| 百家乐美国玩法|