一段四舍五入的代码,
for (int i = 0; i < 100; i++) {
String str = "84"+i+".545";
//System.out.println(Math.round(Double.valueOf(str)));
Double d = Double.valueOf(str);
BigDecimal b = new BigDecimal(d);
double db = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(db+"");
}目的想保留两位小数,但结果却出人意料。
结果一:
循环第6次:846.54
循环第7次:847.54
循环第8次:848.54
循环第9次:849.54
循环第10次:8410.55
循环第11次:8411.55
循环第12次:8412.55
循环第13次:8413.55 ••••••改变str的值为:String str = "1"+i+".545";
打印结果:
循环第5次:15.54
循环第6次:16.55
循环第7次:17.55
循环第8次:18.55
循环第9次:19.55
循环第10次:110.55
循环第11次:111.55
循环第12次:112.55
循环第13次:113.55
循环第14次:114.55
循环第15次:115.55
循环第16次:116.55
循环第17次:117.55
循环第18次:118.55
循环第19次:119.55
循环第20次:120.55
循环第21次:121.55
循环第22次:122.55
循环第23次:123.55
循环第24次:124.55
循环第25次:125.55
循环第26次:126.55
循环第27次:127.55
循环第28次:128.54
循环第29次:129.54
循环第30次:130.54
循环第31次:131.54
循环第32次:132.54
循环第33次:133.54
循环第34次:134.54
循环第35次:135.54
循环第36次:136.54 ••••••
四舍五入,取两位小数。执行的时候出现了问题,我不知道问题出在哪里?代码应该没有问题,是否方法不对?
for (int i = 0; i < 100; i++) {
String str = "84"+i+".545";
//System.out.println(Math.round(Double.valueOf(str)));
Double d = Double.valueOf(str);
BigDecimal b = new BigDecimal(d);
double db = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(db+"");
}目的想保留两位小数,但结果却出人意料。
结果一:
循环第6次:846.54
循环第7次:847.54
循环第8次:848.54
循环第9次:849.54
循环第10次:8410.55
循环第11次:8411.55
循环第12次:8412.55
循环第13次:8413.55 ••••••改变str的值为:String str = "1"+i+".545";
打印结果:
循环第5次:15.54
循环第6次:16.55
循环第7次:17.55
循环第8次:18.55
循环第9次:19.55
循环第10次:110.55
循环第11次:111.55
循环第12次:112.55
循环第13次:113.55
循环第14次:114.55
循环第15次:115.55
循环第16次:116.55
循环第17次:117.55
循环第18次:118.55
循环第19次:119.55
循环第20次:120.55
循环第21次:121.55
循环第22次:122.55
循环第23次:123.55
循环第24次:124.55
循环第25次:125.55
循环第26次:126.55
循环第27次:127.55
循环第28次:128.54
循环第29次:129.54
循环第30次:130.54
循环第31次:131.54
循环第32次:132.54
循环第33次:133.54
循环第34次:134.54
循环第35次:135.54
循环第36次:136.54 ••••••
四舍五入,取两位小数。执行的时候出现了问题,我不知道问题出在哪里?代码应该没有问题,是否方法不对?
String str = "84" + i + ".545";
// System.out.println(Math.round(Double.valueOf(str)));
DecimalFormat df = new DecimalFormat("#.00");
Double d = Double.valueOf(str);
System.out.println(df.format(d));
}
我在原来的浮点数后加了0.0001就可以了。
for (int i = 0; i < 100; i++) {
String str = "84"+i+".545";
//System.out.println(Math.round(Double.valueOf(str)));
Double d = Double.valueOf(str);
BigDecimal b = new BigDecimal(d+0.0001);
double db = (double) b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(db+"");
}
试试吧
改成
BigDecimal b = new BigDecimal(str);
试试看