java成神之——数值操作BigDecimal,BigInteger,Random,SecureRandom
数值操作
数值新特性
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的更多相关文章
- java成神之——线程操作
线程 Future CountDownLatch Multithreading synchronized Thread Producer-Consumer 获取线程状态 线程池 ThreadLocal ...
- java成神之——jaxb操作xml的基本使用
JAXB 依赖 读取xml配置 写配置 自定义写配置 结语 JAXB 依赖 <dependency> <groupId>javax.activation</groupId ...
- java成神之——enum枚举操作
枚举 声明 枚举遍历 枚举在switch中使用 枚举比较 枚举静态构造方法 使用类来模拟枚举 枚举中定义抽象方法 枚举实现接口 单例模式 使用静态代码快 EnumSet EnumMap 结语 枚举 声 ...
- java成神之——Stream和Optional
Stream流 基本使用 流关闭 平行流 流重用 iterator转换成流 分组计数 无限流 流转集合 压缩流 统计数值流 集合转换流遍历 流拼接 reduce 使用流生成随机字符串 流的包装流 几种 ...
- java成神之——java中string的用法
java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...
- java成神之——MySQL Connector/J 的基本使用
使用示例 DBCP连接池 结语 使用示例 public class demo { static Connection con = null; static Statement st = null; s ...
- java成神之——文件IO
文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...
- java成神之——正则表达式基本使用
正则表达式 常用匹配规则 基本使用 标记符的使用 部分正则标记 正则表达式在字符串方法中的使用 结语 正则表达式 常用匹配规则 [abc] abc其中一个 [^abc] abc之外的一个 [a-z] ...
- java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...
随机推荐
- Django进阶Form篇
一.django表单系统中,所有的表单类都作为django.forms.Form的之类创建,包括ModelForm 关于django的表单系统,主要分两种: 1.基于django.forms.Form ...
- docker下运行Gitlab CE+Jenkins+Nexus3+docker-registry-frontend
DevOps - Gitlab CE - Jenkins - Nexus Gitlab CE https://hub.docker.com/r/gitlab/gitlab-ce/ https://do ...
- RabbitMQ 资料整理
前言: 官方教程: https://www.rabbitmq.com/getstarted.html 应用场景(之马云赚钱): http://blog.csdn.net/whoamiyang/arti ...
- React 源码剖析系列 - 生命周期的管理艺术
目前,前端领域中 React 势头正盛,很少能够深入剖析内部实现机制和原理. 本系列文章 希望通过剖析 React 源码,理解其内部的实现原理,知其然更要知其所以然. 对于 React,其组件生命周期 ...
- android开发之eclipse调试debug模式详解
之前我写了一个相关的帖子,但是今天看了一个还是写的比我详细,于是我拿过来和大家分享. 1.在程序中添加一个断点 如果所示:在Eclipse中添加了一个程序断点 在Eclipse中一共有三种添加断 ...
- React Native探索(五)使用fetch进行网络请求
相关文章 React Native探索系列 前言 React Native可以使用多种方式来请求网络,比如fetch.XMLHttpRequest以及基于它们封装的框架,fetch可以说是替代XMLH ...
- Android sharedUserId 使用
在Android 系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,.这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程 ...
- CS与BS区别
简介:CS即Client/Server(客户机/服务器)结构,C/S结构在技术上很成熟,它的主要特点是交互性强.具有安全的存取模式.网络通信量低.响应速度快.利于处理大量数据.但是该结构的程序是针对性 ...
- PS基础教程[1]如何制作微信泡泡
PS是很多朋友都很喜欢额一款图像处理软件,我们可以使用PS制作很多的效果,本系列经验教程的起源就来源于知道中这位朋友问的微信泡泡如何使用,下面就来简单的分享一下. 微信泡泡制作方法 有很多的方法可以制 ...
- Weex入门篇——Mac 安装Weex
相关文档:http://blog.csdn.net/jasonblog/article/details/51863173 前言 相比较于React Native的“Learn once, write ...