double类型如何截取有效位数? 就是double给出的类型表示的时候会有误差,我想截取其中的前几位比如450.8943820597459,我只想要前六位有效数字的话,该如何做呢?PS: Happy new year... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有一个类numberformat,你可以找找 在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类。这两个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。下边我们介绍BigDecimal类:BigDecimal的实现利用到了BigInteger,不同的是BigDecimal加入了小数的概念。一般的float型和Double型数据只可以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecimal类,它支持任何精度的定点数,可以用它来精确计算货币值。下边我们通过举例简单介绍它的用法:首先创造一个BigDecimal类:package com.wsy;import java.math.BigDecimal;public class BigDecimalDemo { static final int location=10; /** * @param args * 这个类提供精确的浮点数运算 */ public static BigDecimal add(double value1,double value2){ BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.add(b2); } public static BigDecimal sub(double value1,double value2){ BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.subtract(b2); } public static BigDecimal mul(double value1,double value2){ BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.multiply(b2); } /* * 提供精确的除法运算 当除不尽时,精确到小数点后10位,以后的数字四舍五入 */ public static BigDecimal div(double value1,double value2){ return div(value1,value2,location); } /* * @param b 表示需要精确到小数点以后的位数 */ public static BigDecimal div(double value1,double value2,int b){ if(b<0){ System.out.println("b值必须大于等于0"); } BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.divide(b2,b,BigDecimal.ROUND_HALF_UP); } public static void main(String[] args) { BigDecimalDemo b=new BigDecimalDemo(); System.out.println("两个数字相加结果:"+b.add(-7.5, 8.9)); System.out.println("两个数字相减结果:"+b.sub(-7.5, 8.9)); System.out.println("两个数字相乘结果:"+b.mul(-7.5, 8.9)); System.out.println("两个数字相除结果,结果小数后保留10位:"+b.div(10, 2)); System.out.println("两个数字相除,结果保留小数后5位:"+b.div(-7.5, 8.9,5)); }} 其中add()、sub()、mul()和div()方法分别实现加减乘除的运算。 同意,BigDecimal是个很好用的东西。 import java.math.BigDecimal;import java.math.RoundingMode;public class Sample { public static final BigDecimal a = new BigDecimal("450.8943820597459"); public static void main(String[] args) { // 6 表示截取到小数点后第6位 // RoundingMode.DOWN 表示小数点后多余6位时,直接截取(不进行四舍五入) BigDecimal result = a.setScale(6, RoundingMode.DOWN); System.out.println("a = " + a); System.out.println("result = " + result); }}输出:a = 450.8943820597459result = 450.894382 …………我的要求没那么复杂,就是想把double的有效数字位数缩短一些。有没有更简单一些的方法呢? DecimalFormat df = new DecimalFormat("#0.00");number = java.lang.Math.round(number*Math.pow(10,digits));df.format(number); String数组初始化 一台机器上两个UDP端口都为0不会冲突吗? 虽然是个oracle的问题,但还是想来java论坛问 java里的<>表示什么 缺省适配器模式有何局限性 向雷锋叔叔求助! 初学JAVA,有感而发-------回realdreamer 用JAVA如何编写见MIDI播放器 新手求救,请在线的朋友帮忙看看,小弟在些先过了!! java网络爬虫工具 java的数据类型有基本类型和引用类型。数组属于什么类型? 如何實現窗口自動適應圖片調整尺寸。
BigDecimal的实现利用到了BigInteger,不同的是BigDecimal加入了小数的概念。一般的float型和Double型数据只可以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecimal类,它支持任何精度的定点数,可以用它来精确计算货币值。下边我们通过举例简单介绍它的用法:
首先创造一个BigDecimal类:
package com.wsy;import java.math.BigDecimal;public class BigDecimalDemo {
static final int location=10;
/**
* @param args
* 这个类提供精确的浮点数运算
*/
public static BigDecimal add(double value1,double value2){
BigDecimal b1=new BigDecimal(Double.toString(value1));
BigDecimal b2=new BigDecimal(Double.toString(value2));
return b1.add(b2);
}
public static BigDecimal sub(double value1,double value2){
BigDecimal b1=new BigDecimal(Double.toString(value1));
BigDecimal b2=new BigDecimal(Double.toString(value2));
return b1.subtract(b2);
}
public static BigDecimal mul(double value1,double value2){
BigDecimal b1=new BigDecimal(Double.toString(value1));
BigDecimal b2=new BigDecimal(Double.toString(value2));
return b1.multiply(b2);
}
/*
* 提供精确的除法运算 当除不尽时,精确到小数点后10位,以后的数字四舍五入
*/
public static BigDecimal div(double value1,double value2){
return div(value1,value2,location);
}
/*
* @param b 表示需要精确到小数点以后的位数
*/
public static BigDecimal div(double value1,double value2,int b){
if(b<0){
System.out.println("b值必须大于等于0");
}
BigDecimal b1=new BigDecimal(Double.toString(value1));
BigDecimal b2=new BigDecimal(Double.toString(value2));
return b1.divide(b2,b,BigDecimal.ROUND_HALF_UP);
}
public static void main(String[] args) {
BigDecimalDemo b=new BigDecimalDemo();
System.out.println("两个数字相加结果:"+b.add(-7.5, 8.9));
System.out.println("两个数字相减结果:"+b.sub(-7.5, 8.9));
System.out.println("两个数字相乘结果:"+b.mul(-7.5, 8.9));
System.out.println("两个数字相除结果,结果小数后保留10位:"+b.div(10, 2));
System.out.println("两个数字相除,结果保留小数后5位:"+b.div(-7.5, 8.9,5));
}
}
import java.math.BigDecimal;
import java.math.RoundingMode;public class Sample {
public static final BigDecimal a = new BigDecimal("450.8943820597459"); public static void main(String[] args) { // 6 表示截取到小数点后第6位
// RoundingMode.DOWN 表示小数点后多余6位时,直接截取(不进行四舍五入)
BigDecimal result = a.setScale(6, RoundingMode.DOWN);
System.out.println("a = " + a);
System.out.println("result = " + result);
}
}输出:
a = 450.8943820597459
result = 450.894382
我的要求没那么复杂,就是想把double的有效数字位数缩短一些。
有没有更简单一些的方法呢?
number = java.lang.Math.round(number*Math.pow(10,digits));
df.format(number);