java四舍五入到两位小数

java四舍五入到两位小数,java,Java,我有一个号码 double num = 1.234567; 我尽量只保留两个小数 num = (int)((num * 100) + 0.5) / 100.0; 但我得到的实际数字是123000000001。我怎样才能去掉0000000001部件 试试看: 试试这个。。这应该可以解决问题 Double num = //value num = //arithmetic String temp =num.toString().split("\\.")[0];

我有一个号码

double num = 1.234567;
我尽量只保留两个小数

num = (int)((num * 100) + 0.5) / 100.0;
但我得到的实际数字是123000000001。我怎样才能去掉0000000001部件

试试看:


试试这个。。这应该可以解决问题

       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());

不能,除非切换到十进制基数。double和float没有小数点,它们有二进制位,因此不能将它们四舍五入或截断为特定的小数点位数,除非值表示是全等的,即2的负幂

因此,如果要显示结果,必须使用
DecimalFormat
,如果要继续使用它进行计算,则必须使用
BigDecimal


任何以将值转换回浮点值结束的解决方案都是不正确的。

u确定将其转换为整数,或得到1.2300…1?我得到的答案是1.23。。然而,如果我不强制转换,我得到1.239567是的,我得到了一堆零,无法解决问题,可能在操作系统中会有不同-我的是64位MAC-OS。。不管怎样,num的值范围是多少?我正在运行debian 64位。。。我不知道我的意思是。。您期望的num值的范围是多少(测试用例)试试这个:MathContext mc=newmathcontext(3)//精度BigDecimal b=新的BigDecimal(num,mc);System.out.println(b.doubleValue())@user1428716将值转换回浮点的答案可能不正确。FP没有小数点。
String result = String.format("%.2f", num);
String result = String.format("%.2f", num);