今天在做计算时遇到一个问题代码如下:
public class Test1 {
public static void main(String[] args){
String c="0.123";
System.out.println(Float.parseFloat(c));
System.out.println(Float.parseFloat(c)+0.8f);
}打印出来的是:0.92300004,当变成0.6f时是0.72300005,而其他例如0.1,0.2等就不会出现这样‘00004’的问题。
请问如果要求精确的小数,而且不用舍位解决这种问题的办法!谢谢!
public class Test1 {
public static void main(String[] args){
String c="0.123";
System.out.println(Float.parseFloat(c));
System.out.println(Float.parseFloat(c)+0.8f);
}打印出来的是:0.92300004,当变成0.6f时是0.72300005,而其他例如0.1,0.2等就不会出现这样‘00004’的问题。
请问如果要求精确的小数,而且不用舍位解决这种问题的办法!谢谢!
解决方案 »
- 编译运行出现exception in thread "main" java.lang.NoClassDefFoundError:
- 求高手 谢了
- 请教一个关于不同随机数的问题
- 宁波那里有学java的
- 如何将 gif,jpeg图片读入内存,转换成bmp的格式,并将结果以 byte[] 输出。
- 想做一个对游戏网站点卡,批量充值的程序 求做法。
- 我配置 jboss 后 run.bat –c all 后的错误,求助 !!!!!!!!!!!!
- JAVA 编译问题,请教!!!
- jbuilder能导入一个目录么???
- 我的第一个JAVA程序(helloWorld),请问为什么会报这种错误?
- 打开的jdialog关闭出了问题
- 高精度除法!!!!!输出问题
如果想使用准确的,比如货币,可以用
BigDecimal
public float add(float v1,float v2){
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.add(b2).floatValue();
} public float sub(float v1,float v2){
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.subtract(b2).floatValue();
} public float mul(float v1,float v2){
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.multiply(b2).floatValue();
} public float div(float v1,float v2){
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.divide(b2,3,BigDecimal.ROUND_HALF_UP).floatValue();
}