Java实现控制小数精度的方法

 更新时间:2021年01月25日 09:33:57   作者:强钦钦  
这篇文章主要介绍了Java实现控制小数精度的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

生成double类型随机数

random()函数源码

/**
 * Creates a new random number generator. This constructor sets
 * the seed of the random number generator to a value very likely
 * to be distinct from any other invocation of this constructor.
 */
 public Random() {
 this(seedUniquifier() ^ System.nanoTime());
 }

nextDouble()函数源码

public double nextDouble() {
  return (((long)(next(26)) << 27) + next(27)) * DOUBLE_UNIT;
 }

我们可以这样生成一个doublel类型随机数。

代码

import java.util.Random;
public class Format {
 public static void main(String[] args) {
 //方法1
 Random random=new Random();
 double num=random.nextDouble();
 //方法2
 //double num= Math.random(); 
  System.out.println(num);
  }
}

输出:

0.04342853133845903

我们发现输出结果是一个[0,1)之间的很长的小数值。如果我们不需要这么长的小数位数应该怎么处理呢?

控制小数位数

1.截断 多余小数位

 public class Format {
  public static void main(String[] args) {
   double d = 1.23456789;
   // 需要几位小数,就乘以10的几次方,再强转。
   int i = (int) (d * 100000);//注意等式右边带了两个()
   // 又转回去。
   double d2 = (double) i / 100000;//等式右边必须加(double)并且i/10000不要加括号
   System.out.println(d2);
  }
 }

输出

1.23456

2.利用数字格式化

import java.text.NumberFormat;
public class Format {
 public static void main(String[] args) {

 double d = 1.23456789;
 NumberFormat Nformat = NumberFormat.getInstance();
 // 设置小数位数。
 Nformat.setMaximumFractionDigits(2);
 // 对d进行转换。
 String str = Nformat.format(d);
 // 将String类型转化位double
 //方法1
 //Double num = Double.parseDouble(str);
 //方法2
 double num=Double.valueOf(str).doubleValue();
 System.out.println(num);
 }
}

输出:

1.23457

3.利用十进制格式化器

import java.text.DecimalFormat;
public class Format {
 public static void main(String[] args) {
  double d = 1.23456789;
  // 设置格式样式
  DecimalFormat Dformat=new DecimalFormat("0.00000");
  // 格式化
  String str=Dformat.format(d);
 //将String类型转化位double
 //Double num = Double.parseDouble(str);//方法1
 double num=Double.valueOf(str).doubleValue();//方法2
 System.out.println(num);
 }
}

输出

1.23457

4.利用BigDecimal(终极)

  • BigDecimal是java.math包中提供的API类,可处理超过16位有效位的数。在开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。
  • BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
import java.math.BigDecimal;
public class Format {
 public static void main(String[] args) {

  double d = 1.23456789;
  BigDecimal decimal=new BigDecimal(d);
  // 四舍五入为五位小数
  double d2=decimal.setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue();
  System.out.println(d2);
 }
}

输出:

1.23457

参考资料:

Java控制小数位,获得随机数
BigDecimal详解
Java字符串和数字间的转换

到此这篇关于Java实现控制小数精度的方法的文章就介绍到这了,更多相关Java 小数精度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java基础教程之构造器与方法重载

    Java基础教程之构造器与方法重载

    这篇文章主要介绍了Java基础教程之构造器与方法重载,构造器可以初始化数据成员,还可以规定特定的操作,本文还对方法重载做了介绍,需要的朋友可以参考下
    2014-08-08
  • Java中的Sentinel持久化规则启动

    Java中的Sentinel持久化规则启动

    这篇文章主要介绍了Java中的Sentinel持久化规则启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • java实现模仿斗地主发牌

    java实现模仿斗地主发牌

    这篇文章主要为大家详细介绍了java实现模仿斗地主发牌,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Spring Boot中RabbitMQ自动配置的介绍、原理和使用方法

    Spring Boot中RabbitMQ自动配置的介绍、原理和使用方法

    本文介绍了Spring Boot中RabbitMQ自动配置的介绍、原理和使用方法,通过本文的介绍,我们希望读者能够更好地理解Spring Boot中RabbitMQ的使用方法,并在项目中更加灵活地应用,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • 关于Java中static关键字的用法

    关于Java中static关键字的用法

    这篇文章主要介绍了关于Java中static关键字的用法,static:意为静态的,在 Java 里面作为静态修饰符,可以理解为全局的意思,static 不仅可以修饰成员变量,成员方法,还可以修饰代码块,需要的朋友可以参考下
    2023-08-08
  • 浅析Java内存模型与垃圾回收

    浅析Java内存模型与垃圾回收

    下面小编就为大家带来一篇浅析Java内存模型与垃圾回收。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-05-05
  • tio-boot框架整合ehcache实现过程示例

    tio-boot框架整合ehcache实现过程示例

    这篇文章主要为大家介绍了tio-boot框架整合ehcache实现过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Java调用C++动态库超详细步骤讲解(附源码)

    Java调用C++动态库超详细步骤讲解(附源码)

    C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,这篇文章主要介绍了Java调用C++动态库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • 关于spring boot整合kafka+注解方式

    关于spring boot整合kafka+注解方式

    这篇文章主要介绍了关于spring boot整合kafka+注解方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • DecimalFormat数字格式化 0和# 的区别及说明

    DecimalFormat数字格式化 0和# 的区别及说明

    这篇文章主要介绍了DecimalFormat数字格式化 0和# 的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论