小数点后保留六位小数的几种方法
public static void main(String[] args) {
java.text.DecimalFormat df = new DecimalFormat("#.000000");
java.text.NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(6);//保留小数点后几位就传几
nf.setRoundingMode(RoundingMode.DOWN);//需要四舍五入就用 RoundingMode.UP
double lat = 120.15784662032509;
System.err.println(df.format(lat));//1
System.err.println(nf.format(lat));//2
System.err.println(String.format("%.6f",lat));//3
System.err.println(df.format((int) Math.ceil(lat)));//向上取整
/**
* Math.round() “四舍五入”, 该函数返回的是一个四舍五入后的的整数
* Math.ceil() “向上取整”, 即小数部分直接舍去,并向正数部分进1
* Math.floor() “向下取整” ,即小数部分直接舍去
*/
}
由于我处理的是经纬度需要保留小数点后六位数,有些就不适用了。
ps:今天再测试的时候发现 NumberFormat处理经度时总会出现取五位的情况,是因为如果截取的最后一位是0的话在格式化的时候会不显示出来。最后只能自己使用subString自己截取了。
public static void main(String[] args) {
java.text.NumberFormat nf = NumberFormat.getNumberInstance();
//nf = (DecimalFormat)nf;
((DecimalFormat) nf).applyPattern("#.000000");//强制转换为DecimalFormat 添加格式
nf.setMaximumFractionDigits(6);//保留小数点后几位就传几
nf.setRoundingMode(RoundingMode.DOWN);//需要四舍五入就用 RoundingMode.UP
System.err.println(nf.format(136.54222032402261));//
System.err.println(nf.format(29.939281970523797));//
System.err.println(SubStringLaLotude(136.54222032402261));//
}
public static String SubStringLaLotude(Double number) {
String strLanlot="0.000000";
if(number>0){
strLanlot = String.valueOf(number);
// 获得第一个点的位置
int index = strLanlot.indexOf(".");
// 根据点的位置,截取 字符串。得到结果 result
String result = strLanlot.substring(index);
strLanlot = strLanlot.substring(0, index) + (result.length() < 7 ? result : result.substring(0, 7));// 取小数点后六位的经纬度
}
return strLanlot;
}
有关其他的数字处理可以参考下 :
public class DoubleFormat {
double f = 11.4585;
public void m1() {
BigDecimal bg = new BigDecimal(f);
double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(f1);
}
/**
* DecimalFormat转换最简便
*/
public void m2() {
//#.00 表示两位小数
DecimalFormat df = new DecimalFormat("#0.00");
System.out.println(df.format(f));
}
/**
* String.format打印最简便
*/
public void m3() {
//%.2f %.表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型
System.out.println(String.format("%.2f", f));
}
public void m4() {
NumberFormat nf = NumberFormat.getNumberInstance();
//digits 显示的数字位数 为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(f));
}
public static void main(String[] args) {
DoubleFormat f = new DoubleFormat();
f.m1();
f.m2();
f.m3();
f.m4();
}
/* Math.floor() 通过该函数计算后的返回值是舍去小数点后的数值
如:Math.floor(3.2)返回3
Math.floor(3.9)返回3
Math.floor(3.0)返回3
Math.ceil()
ceil函数只要小数点非0,将返回整数部分+1
如:Math.ceil(3.2)返回4
Math.ceil(3.9)返回4
Math.ceil(3.0)返回3*/
}