我公司拥有一批Java的舍入到两位小数
double num = 1.234567;
,我想只保留两位小数
num = (int)((num * 100) + 0.5)/100.0;
,但我得到的实际数量为1.230000000001。我怎样才能摆脱0000000001部分?
我公司拥有一批Java的舍入到两位小数
double num = 1.234567;
,我想只保留两位小数
num = (int)((num * 100) + 0.5)/100.0;
,但我得到的实际数量为1.230000000001。我怎样才能摆脱0000000001部分?
DecimalFormat twoDp= new DecimalFormat("#.##");
Double.valueOf(twoDp.format(num));
有没有什么办法没有这个格式的对象? – OneZero 2013-03-03 03:19:55
试试这个:MathContext mc = new MathContext(3); // Precision \t BigDecimal b = new BigDecimal(num,mc); \t System.out.println(b.doubleValue()); – user1428716 2013-03-03 03:31:34
@ user1428716将值转换回浮点的答案可能是正确的。 FP没有小数位。 – EJP 2013-03-03 09:05:56
试试这个..这应该解决它
Double num = //value
num = //arithmetic
String temp =num.toString().split("\\.")[0];
int precision=temp.length();
BigDecimal b =new BigDecimal(num,new MathContext(precision+2));
System.out.println(b.doubleValue());
你不能,除非你切换到十进制基数。双数和浮点数没有小数位,它们有二进制位,所以除了数值表示形式一致的情况下,不能将它们舍入或截断为特定的小数位数,即2的负幂。
因此,如果要显示结果,则必须使用DecimalFormat
,如果要继续使用计算结果,则必须使用BigDecimal
。
任何通过将值重新转换为浮点结束的解决方案都不正确。
String result = String.format("%.2f", num);
你确定把它转换成int得到1.2300 ... 1?我得到的答案为1.23 ..但是,如果我不施放它,我得到1.239567 – user1428716 2013-03-03 03:14:28
是的,我得到了一堆零,并不能解决问题 – OneZero 2013-03-03 03:17:15
可能会在操作系统有所不同 - 我的是64位MAC-OS ..反正什么是数值的范围? – user1428716 2013-03-03 03:32:20