84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
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));
ringa_lee
首先,指出一个问题:构建BigDecimal的时候,尽量不要使用浮点数(double,float),因为浮点数在计算机中的存储存在精度缺失问题。比如你的写的代码:
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()); }
运行结果:
可以看到,浮点数 1.505 在计算机中没法存储的 —— 具体原因如果不知道,请自行搜索“浮点数精度缺失问题”
第二,如果需要输出1.51,即常说的 “四舍五入”,那么需要指定DecimalFormat的舍入模式:
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)); }
如果不了解RoundingMode的用法,请自行搜索“RoundingMode 的用法”
RoundingMode
第三,关于DecimalFormat括号里的字符串代表的意思,请自行搜索“DecimalFormat 的用法”
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。 等待大神解答
首先,指出一个问题:构建
BigDecimal
的时候,尽量不要使用浮点数(double
,float
),因为浮点数在计算机中的存储存在精度缺失问题。比如你的写的代码:运行结果:
可以看到,浮点数 1.505 在计算机中没法存储的 —— 具体原因如果不知道,请自行搜索“浮点数精度缺失问题”
第二,如果需要输出1.51,即常说的 “四舍五入”,那么需要指定
DecimalFormat
的舍入模式:运行结果:
如果不了解
RoundingMode
的用法,请自行搜索“RoundingMode 的用法”第三,关于
DecimalFormat
括号里的字符串代表的意思,请自行搜索“DecimalFormat 的用法”