数值操作

数值新特性

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成神的系列文章之一

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

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

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

  1. java成神之——线程操作

    线程 Future CountDownLatch Multithreading synchronized Thread Producer-Consumer 获取线程状态 线程池 ThreadLocal ...

  2. java成神之——jaxb操作xml的基本使用

    JAXB 依赖 读取xml配置 写配置 自定义写配置 结语 JAXB 依赖 <dependency> <groupId>javax.activation</groupId ...

  3. java成神之——enum枚举操作

    枚举 声明 枚举遍历 枚举在switch中使用 枚举比较 枚举静态构造方法 使用类来模拟枚举 枚举中定义抽象方法 枚举实现接口 单例模式 使用静态代码快 EnumSet EnumMap 结语 枚举 声 ...

  4. java成神之——Stream和Optional

    Stream流 基本使用 流关闭 平行流 流重用 iterator转换成流 分组计数 无限流 流转集合 压缩流 统计数值流 集合转换流遍历 流拼接 reduce 使用流生成随机字符串 流的包装流 几种 ...

  5. java成神之——java中string的用法

    java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...

  6. java成神之——MySQL Connector/J 的基本使用

    使用示例 DBCP连接池 结语 使用示例 public class demo { static Connection con = null; static Statement st = null; s ...

  7. java成神之——文件IO

    文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...

  8. java成神之——正则表达式基本使用

    正则表达式 常用匹配规则 基本使用 标记符的使用 部分正则标记 正则表达式在字符串方法中的使用 结语 正则表达式 常用匹配规则 [abc] abc其中一个 [^abc] abc之外的一个 [a-z] ...

  9. java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作

    ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...

随机推荐

  1. Dubbo定义及其作用

    Dubbo定义 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只 ...

  2. idea解决properties乱码问题

    问题:我的IDEA已经将文件的字符集设置成了UTF-8,但是中文在*.properties文件中还是会出现乱码,后来经同事指点修改了一项配置就ok了!话不多说,看下面的对比就清楚了. 设置前: 设置后 ...

  3. 剑指offer--24.树的子结构

    时间限制:1秒 空间限制:32768K 热度指数:407165 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   class Solution ...

  4. 2017.11.4 Datasheet 查找替代料

  5. 记录下工作中使用的pdf.js

    在工作中遇到一个通过网页的形式浏览pdf文件以及图片的需求,图片简单,直接通过网页的形式打开这个图片的URL即可.而pdf这边,通过查询发现有一个名为pdf.js的神器. 简单介绍下,它可以在html ...

  6. eclipse 不能启动虚拟机

    在eclipse文件下有个eclipse.ini文件打开它.现在如果没有-vm 这个参数那么就在最后新起一行写上 -vm+空格+参数 参数是你安装的jdk目录比如我的 -vm d:/java/jdk1 ...

  7. macOS Ruby版本需要升级到2.2.2以上

    在安装 Ruby on Rails 时遇到问题,提示依赖 ruby 2.2.2 或更高的版本. ERROR: Error installing rails: activesupport require ...

  8. Thrift之java实例

    一.java实例 1.下载与安装thrift工具 http://thrift.apache.org/download/ .服务器代码 服务Test实现类 package com.zychen.thri ...

  9. 随想录(skyeye中的soc仿真)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 想学好soc,再怎么看芯片手册和linux kernel都不为过.但是要学习好kernel,那再 ...

  10. 混用Application.LoadLevel 和 PhotonNetwork.LoadLevel

    最近这一周从上周五晚上加完班回家夜里都12点了. 又赶紧送孩子去儿童医院  .. 就肺炎住院了.  真是有啥别有病呢.  悲剧的是我周三夜里陪了一夜后. 转天晚上也发烧了.. 周四 周五输了两天液. ...