久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

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

代碼如下,java用BigDecimal四舍五入怎么還有問(wèn)題呀?哪種方式是完全沒(méi)有問(wèn)題的?

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

問(wèn)題描述

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

2.decimalformat括號(hào)里的字符串代表了什么意思?有模板嗎?如果是別的格式應(yīng)該怎么寫(xiě)

3.為什么要用#號(hào)而不是0.00?如果是#好的話,當(dāng)a是0.505的時(shí)候有bug

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

問(wèn)題解答

回答1:

首先,指出一個(gè)問(wèn)題:構(gòu)建 BigDecimal 的時(shí)候,盡量不要使用浮點(diǎn)數(shù)(double,float),因?yàn)楦↑c(diǎn)數(shù)在計(jì)算機(jī)中的存儲(chǔ)存在精度缺失問(wèn)題。比如你的寫(xiě)的代碼:

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

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

可以看到,浮點(diǎn)數(shù) 1.505 在計(jì)算機(jī)中沒(méi)法存儲(chǔ)的 —— 具體原因如果不知道,請(qǐng)自行搜索 “浮點(diǎn)數(shù)精度缺失問(wèn)題”

第二,如果需要輸出 1.51,即常說(shuō)的 “四舍五入”,那么需要指定 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));}

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

如果不了解 RoundingMode 的用法,請(qǐng)自行搜索 “RoundingMode 的用法”

第三,關(guān)于 DecimalFormat 括號(hào)里的字符串代表的意思,請(qǐng)自行搜索 “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在做四舍五入的時(shí)候舍掉了后面的4xxxxxx。 等待大神解答

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 永寿县| 镇巴县| 繁昌县| 集安市| 泽普县| 日土县| 夏邑县| 陆丰市| 龙江县| 永清县| 四会市| 桦南县| 库尔勒市| 方城县| 岱山县| 界首市| 秦安县| 鞍山市| 海南省| 旬阳县| 嘉义市| 吉木乃县| 涪陵区| 平凉市| 通海县| 阿勒泰市| 宝山区| 汤阴县| 潢川县| 广丰县| 南澳县| 虞城县| 宁武县| 新源县| 双柏县| 淮南市| 金塔县| 德化县| 昌都县| 濉溪县| 荔波县|