午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:303日期: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:

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

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

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

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

第二,如果需要輸出 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));}

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

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

第三,關(guān)于 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
相關(guān)文章:
主站蜘蛛池模板: av在线免费网址 | 成人国产免费视频 | 夜夜春视频| 国产又大又粗又爽 | 99riav国产精品视频 | 一区二区三区免费在线观看视频 | 国产精品美女在线 | 欧美黄色性视频 | 殴美一级片 | 亚洲午夜激情 | 亚洲精品免费播放 | www色日本| 伊人网视频在线 | 国产99色| 欧美黄色三级视频 | 国产老熟| 九九热精品在线观看 | 五月激情综合 | 国产精品v亚洲精品v日韩精品 | 日韩国产中文字幕 | 日韩av男人天堂 | 麻豆视频在线观看免费网站黄 | 国产18无套直看片 | 国产高清一区 | 国产精品 | 黄色av网址大全 | 久久黄页 | 久久精品无码一区二区三区 | 夜色99 | 浪潮av| 日韩av一级| 成年人在线视频网站 | 国产精品精品国产 | 天天久久久 | 成年午夜视频 | 怎样看毛片 | 欧美午夜精品一区二区三区 | 亚洲免费视频网 | 国产亚洲欧美一区二区三区 | 欧美视频二区 | 天堂伊人网 |