建议方法:用Bigdecimal来处理浮点数的加减
例如:
import java.math.BigDecimal;
import java.util.*;
public class Main
{
public static void main(String ags[])
{
Scanner cn=new Scanner(System.in);
double t=0.011115;
double r=0.012222;
BigDecimal q=new BigDecimal(String.valueOf(t) );
BigDecimal w=new BigDecimal(String.valueOf(r));
System.out.println(q.add(w).setScale(4,BigDecimal.ROUND_HALF_UP ));
/*q.multiply(w); 乘法
q.abs();
q.divide(w); 除法
q.subtract(w); 减法*/
//通过转化成bigdecimal的一个实例,然后可以加减乘除,通过setScale方法,第一个参数数设置保留的位数
//第二个参数是保留的形式 BigDecimal.ROUND_HALF_UP 是4舍5入比较常用
//还有如下的保留方式,但是不常用
/*setScale(1)表示保留一位小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍*/
}
}
方法一:通过四舍五入方式保留特定后几位
import java.util.*;
public class Main
{
public static void main(String args[])
{
double t=1.123456;
System.out.println((double)Math.round(t*100000)/100000); //5个零
}
}
输出:1.12346(四舍五入了)
说明:这种方式通过强制输出double类型,同时注意这里有乘上几个零就是保留几个小数。如果改成Math.round(t*100)/100,这样就会输出1.12
方法二:通过四舍五入保留小数
import java.util.*;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
double t=1.123456;
System.out.println(new DecimalFormat("0.0000").format(t)); //英语中:Decimal---十进制的 Format----格式化
}
}
输出:1.1235
说明:这是调用了text.DecimalFormat,在输出时候,将数字格式化了,其实(“0.0000”)就是格式的模版,输出4个小数,会自动四舍五入,改成(“0.0”)就会输出1.1,改成(“00.000”)会自动补位输出01.123
方法三:通过四舍五入保留小数
import java.util.*;
public class Main {
public static void main(String[] args) {
double t = 1.123456;
String str = String.format("%.4f", t);
System.out.println(str);
}
}
输出:1.1234
说明:通过转换成字符串的方式输出小数点后几位,其中的(“%4f”)就是控制的输出的小数点的位数要求
方法四:不四舍五入保留小数
import java.util.*;
public class Main {
public static void main(String[] args) {
double t = 1.123456;
String str = String.valueOf(t);
String str2="";
for(int i=0;i<6;i++)
str2=str2+str.charAt(i);
System.out.println(str2);
}
}
输出:1.1234
说明:本质就是强制转化成字符串,然后进行字符串的截取工作