国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

代碼如下,java用BigDecimal四舍五入怎么還有問題呀?哪種方式是完全沒有問題的?

瀏覽:146日期:2024-01-16 17:22:46

問題描述

1.為什么不是1.51?輸出的是1.50

2.decimalformat括號里的字符串代表了什么意思?有模板嗎?如果是別的格式應該怎么寫

3.為什么要用#號而不是0.00?如果是#好的話,當a是0.505的時候有bug

double a =1.505;BigDecimal bd = new BigDecimal(a);System.out.println(new DecimalFormat('#.00').format(bd));

問題解答

回答1:

首先,指出一個問題:構建 BigDecimal 的時候,盡量不要使用浮點數(double,float),因為浮點數在計算機中的存儲存在精度缺失問題。比如你的寫的代碼:

public static void main(String[] args) throws Exception { double a = 1.505; BigDecimal bd = new BigDecimal(a); System.out.println('bd: ' + bd.toString());}

運行結果:代碼如下,java用BigDecimal四舍五入怎么還有問題呀?哪種方式是完全沒有問題的?

可以看到,浮點數 1.505 在計算機中沒法存儲的 —— 具體原因如果不知道,請自行搜索 “浮點數精度缺失問題”

第二,如果需要輸出 1.51,即常說的 “四舍五入”,那么需要指定 DecimalFormat 的舍入模式:

public static void main(String[] args) throws Exception { BigDecimal bd = new BigDecimal('1.505'); System.out.println('bd: ' + bd.toString()); DecimalFormat df = new DecimalFormat('#.00'); df.setRoundingMode(RoundingMode.HALF_UP); System.out.println('format: ' + df.format(bd));}

運行結果:代碼如下,java用BigDecimal四舍五入怎么還有問題呀?哪種方式是完全沒有問題的?

如果不了解 RoundingMode 的用法,請自行搜索 “RoundingMode 的用法”

第三,關于 DecimalFormat 括號里的字符串代表的意思,請自行搜索 “DecimalFormat 的用法”

回答2:

System.out.println(String.format('%.2f', a)); System.out.println(new Formatter().format('%.2f', a));這兩種是可以的。 double d = 5.505; System.out.println(d) 輸出的是1.504xxxxxxxxx,所以java在做四舍五入的時候舍掉了后面的4xxxxxx。 等待大神解答

標簽: java
相關文章:
主站蜘蛛池模板: 精品成人在线观看 | 免费一级a毛片在线播放 | 波多野结衣一区二区三区88 | 免费观看一级成人毛片 | 国产三级精品三级 | 97视频在线观看免费视频 | 一级特黄aa大片欧美网站 | 亚洲国产成人麻豆精品 | 国产99视频在线观看 | 亚洲成av人在线视 | 国产三a级日本三级日产三级 | 一区二区三区精品视频 | 精品网址 | 99激情| 日韩国产欧美在线观看 | 久久久9999久久精品小说 | 午夜毛片不卡高清免费 | 亚洲伊人色综合网站亚洲伊人 | 在线视频观看免费视频18 | 中文字幕亚洲不卡在线亚瑟 | 国产无卡一级毛片aaa | 精品国产免费人成高清 | 一级女性全黄生活片免费 | 欧美成人午夜 | 亚洲 欧美 都市 自拍 在线 | 亚洲欧美日韩在线不卡中文 | 久操福利视频 | 日韩一区在线播放 | 亚洲欧美另类日本久久影院 | 男女男精品视频网站在线观看 | 韩国美女爽快毛片免费 | 欧美成免费| 99re久久精品国产首页2020 | 日韩一区二区三区四区不卡 | 国产一在线 | 玖玖爱精品 | 日本一区二区在线 | 韩国自拍偷自拍亚洲精品 | 久在线观看| 在线观看 一区 | 九九成人免费视频 |