
正文
java成神之——数值操作BigDecimal,BigInteger,Random,SecureRandom
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
- 数值操作
- 数值新特性
- 包装类
- 浮点
- BigDecimal
- BigInteger
- 数值本地化
- 随机数
- 假随机数
- 真随机数
- 播种
- 结语
数值操作数值新特性
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-100long 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成神的系列文章之一如果你想知道,但是本文没有的,请下方留言我会第一时间总结出来并发布填充到本文






