当前位置:首页 > Java技术 > java成神之——数值操作BigDecimal,BigInteger,Random,SecureRandom

java成神之——数值操作BigDecimal,BigInteger,Random,SecureRandom

2022年08月05日 11:07:17Java技术4

数值操作

数值新特性

123_456 等价于 123456,增加可读性

包装类

每个基本数据类型都会有一个包装类与之对应,用来提供更为强大的功能

包装类: Byte Short Integer Long Float Double Character Boolean
        
将字符串转化成对应的基本数据类型
    boolean bl = Boolean.parseBoolean("false");
    int i = Integer.parseInt("11");
            
将基本数据类型转化成字符串
    String str = Integer.toString(3);
            
使用包装类构造函数
    Integer it = new Integer("5555");
    int i = it.intValue();
            
基本数据类型自动装箱和拆箱
    Integer i = 11; // 装箱
    i++; // 拆箱

浮点

String.format("%.2f", 1.2399);                  // "1.24"
new DecimalFormat("0.##").format(1.2323000);    // 1.23

BigDecimal

高精度计算

BigDecimal方法

    BigDecimal a = new BigDecimal(10000000);
    BigDecimal b = new BigDecimal(10000001);
    a.compareTo(b)                                          // -1      a>b -1, a=b 0, a<b 1
    a.add(b)                                                // 20000001
    a.subtract(b)                                           // -1
    a.multiply(b)                                           // 100000010000000
    a.multiply(b, new MathContext(4,RoundingMode.FLOOR))    // 1.000E+14
    a.divide(b, new MathContext(4,RoundingMode.HALF_DOWN))  // 1.000
    a.divide(b, 4, RoundingMode.HALF_DOWN)                  // 1.000
    a.remainder(b)                                          // 10000000 取模
    a.pow(10)                                               // 次方
    a.max(b)                                                // 比较a,b谁大
    a.min(b)                                                // 比较a,b谁小
    a.movePointLeft(2)                                      // 100000.00 移动小数点
    不要使用equals判断是否相等,除非数字小数点个数也相同

BigDecimal静态实例

    BigDecimal a = BigDecimal.ZERO;
    BigDecimal b = BigDecimal.ONE;
    BigDecimal c = BigDecimal.TEN;
    String.format("%s, %s, %s", a, b, c)                    // 0, 1, 10

BigInteger

高精度计算

BigDecimal方法

    BigInteger a = BigInteger.valueOf(Long.MAX_VALUE);
    BigInteger b = new BigInteger("-11");
    BigInteger c = BigInteger.ZERO;
    BigInteger d = BigInteger.ONE;
    BigInteger e = BigInteger.TEN;
    String.format("%s, %s, %s, %s, %s", a, b, c, d, e)     // 9223372036854775807, -11, 0, 1, 10

    a.add(b);
    a.subtract(b);
    a.divide(b);
    a.multiply(b);
    a.pow(3);
    a.remainder(b);
    a.max(b);
    a.min(b);
    a.equals(b);
    不要使用 == 比较
    a.compareTo(b);

返回一个64位数
    BigInteger a = new BigInteger(32, new Random());       // 随机数,32表示位数,因为返回的是正数所以一共64位
    BigInteger b = new BigInteger(32, new SecureRandom()); // 性能低,但是随机数质量更高

数值本地化

ISO 639 alpha-2 语言简写 https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
ISO 3166 alpha-2 国家简写 https://www.iso.org/obp/ui/#search

格式化数值

    Locale locale = new Locale("zh", "CN");
    NumberFormat numberFormat = NumberFormat.getInstance(locale);
    numberFormat.format(1.111)

格式化货币

    Locale locale = new Locale("zh", "CN");
    NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
    numberFormat.format(1.111) // ¥1.11

格式化百分数

    Locale locale = new Locale("zh", "CN");
    NumberFormat numberFormat = NumberFormat.getPercentInstance(locale);
    numberFormat.format(1.111) // 111%

格式化位数

    Locale locale = new Locale("zh", "CN");
    NumberFormat numberFormat = NumberFormat.getInstance(locale);
    numberFormat.setMinimumIntegerDigits(2);
    numberFormat.format(1.111); // 01.111

    numberFormat.setMaximumIntegerDigits(1);
    numberFormat.format(12.111); // 2.111

    numberFormat.setMinimumFractionDigits(1);
    numberFormat.format(12); // 12.0

    numberFormat.setMaximumFractionDigits(1);
    numberFormat.format(12.11) // 12.1

随机数

假随机数

Random random = new Random(); 
int randInt = random.nextInt();               // 0-1
int randInt = random.nextInt(1000);           // 0-1000
ThreadLocalRandom.current().nextInt(10, 100); // 10-100

long randLong = random.nextLong();
double randDouble = random.nextDouble();
float randFloat = random.nextFloat();

byte[] bytes = new byte[16];
random.nextBytes(bytes);

真随机数

SecureRandom rng = new SecureRandom();
byte[] randomBytes = new byte[64];
rng.nextBytes(randomBytes);
Arrays.toString(randomBytes);

播种

相同的种子只能产生相同的随机数

Random random = new Random(12345L);
Random random = new Random(System.currentTimeMillis());

ThreadLocalRandom tlr = ThreadLocalRandom.current().setSeed(12345L);
ThreadLocalRandom.current().setSeed(System.currentTimeMillis());

结语

本文章是java成神的系列文章之一

如果你想知道,但是本文没有的,请下方留言

我会第一时间总结出来并发布填充到本文

作者:qz奔跑的马
来源链接:https://www.cnblogs.com/ye-hcj/p/9723489.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17568.html

标签: BigDecimal
分享给朋友:

“java成神之——数值操作BigDecimal,BigInteger,Random,SecureRandom” 的相关文章

java.math.BigDecimal常用方法

+构造函数 BigDecimal(BigInteger val) 将BigInteger转化为BigDecimal。 BigDecimal(BigInteger unscaledVal, int scale) 将B...

Java 使用BigDecimal进行高精度加减乘除

有时候我们计算金钱或者其他一些计算的时候需要高精度的计算加减乘除,可以使用BigDecimal 加: BigDecimal num1 = new BigDecimal("100.569"); BigDecimal num2 = new Big...

[转]BigDecimal使用(整理)

原文地址:https://www.jianshu.com/p/2947868d76eb 应用场景 大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:货币 使用 1、构建BigDecima...

Java:利用BigDecimal类巧妙处理Double类型精度丢失

Java:利用BigDecimal类巧妙处理Double类型精度丢失

文章目录 本篇要点 经典问题:浮点数精度丢失 十进制整数如何转化为二进制整数? 十进制小数如何转化为二进制数?...

BigDecimal 与 doubleValue 的使用 ,以及四舍五入

/** * 保存发票信息 * @param controller * @return * @throws ParseException * @throws ActiveRecordException */ @...

BigDecimal转为int类型

BigDecimal转为int类型

直接调用BigDecimal的intValue()方法 示例: BigDecimal a = new BigDecimal(“1.1”); int b = a.intValue(); BigDecimal运算方法:...

JDK中BigDecimal的代码实现

package java.math; import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.PrintStream;...

Java BigDecimal

1构造函数(主要测试参数类型为double和String的两个常用构造函数)        BigDecimal aDouble =new BigDecimal(1.22);  &nb...

BigDecimal 使用compareTo比较大小

1.BigDecimal的比较模式  BigDecimal b1 = new BigDecimal(0.1); BigDecimal b2 = new BigDecimal(0.2); int c = b1.compareTo(b2); // -1 c=1表示...

【java提高】(19)---BigDecimal详解和精度问题

【java提高】(19)---BigDecimal详解和精度问题

BigDecimal详解和精度问题 一、背景 在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal,例如价格、质量。 为什么这么说,主要有两点...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。