Java实现控制小数精度的方法
生成double类型随机数
random()函数源码
/** *Createsanewrandomnumbergenerator.Thisconstructorsets *theseedoftherandomnumbergeneratortoavalueverylikely *tobedistinctfromanyotherinvocationofthisconstructor. */ publicRandom(){ this(seedUniquifier()^System.nanoTime()); }
nextDouble()函数源码
publicdoublenextDouble(){ return(((long)(next(26))<<27)+next(27))*DOUBLE_UNIT; }
我们可以这样生成一个doublel类型随机数。
代码
importjava.util.Random; publicclassFormat{ publicstaticvoidmain(String[]args){ //方法1 Randomrandom=newRandom(); doublenum=random.nextDouble(); //方法2 //doublenum=Math.random(); System.out.println(num); } }
输出:
0.04342853133845903
我们发现输出结果是一个[0,1)之间的很长的小数值。如果我们不需要这么长的小数位数应该怎么处理呢?
控制小数位数
1.截断多余小数位
publicclassFormat{ publicstaticvoidmain(String[]args){ doubled=1.23456789; //需要几位小数,就乘以10的几次方,再强转。 inti=(int)(d*100000);//注意等式右边带了两个() //又转回去。 doubled2=(double)i/100000;//等式右边必须加(double)并且i/10000不要加括号 System.out.println(d2); } }
输出
1.23456
2.利用数字格式化
importjava.text.NumberFormat; publicclassFormat{ publicstaticvoidmain(String[]args){ doubled=1.23456789; NumberFormatNformat=NumberFormat.getInstance(); //设置小数位数。 Nformat.setMaximumFractionDigits(2); //对d进行转换。 Stringstr=Nformat.format(d); //将String类型转化位double //方法1 //Doublenum=Double.parseDouble(str); //方法2 doublenum=Double.valueOf(str).doubleValue(); System.out.println(num); } }
输出:
1.23457
3.利用十进制格式化器
importjava.text.DecimalFormat; publicclassFormat{ publicstaticvoidmain(String[]args){ doubled=1.23456789; //设置格式样式 DecimalFormatDformat=newDecimalFormat("0.00000"); //格式化 Stringstr=Dformat.format(d); //将String类型转化位double //Doublenum=Double.parseDouble(str);//方法1 doublenum=Double.valueOf(str).doubleValue();//方法2 System.out.println(num); } }
输出
1.23457
4.利用BigDecimal(终极)
- BigDecimal是java.math包中提供的API类,可处理超过16位有效位的数。在开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。
- BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
importjava.math.BigDecimal; publicclassFormat{ publicstaticvoidmain(String[]args){ doubled=1.23456789; BigDecimaldecimal=newBigDecimal(d); //四舍五入为五位小数 doubled2=decimal.setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(d2); } }
输出:
1.23457
参考资料:
Java控制小数位,获得随机数
BigDecimal详解
Java字符串和数字间的转换
到此这篇关于Java实现控制小数精度的方法的文章就介绍到这了,更多相关Java小数精度内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!