目录

数字格式化:

大数据:

常用构造函数:

常用方法:

BigDecimal大小比较:

除法的时候出现异常

工具类推荐:

随机数生成方法random():

参考文献:


数字格式化:

符号 说明
0 显示数字,如果位数不够则补 0
# 显示数字,如果位数不够不发生变化
. 小数分隔符
- 减号
, 组分隔符
E 分隔科学记数法中的尾数和小数
% 前缀或后缀,乘以 100 后作为百分比显示
? 乘以 1000 后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替;
如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符

表1 DecimalFormat支持的特殊字符

        java.text.DecimalFormat 专门负责数字格式化的。 通过调用该类的实例对象的 format() 方法可以把实参的数字转为所需格式的字符串形式的数字返回。

import java.text.DecimalFormat;/*
关于数字的格式化。*/public class DecimalFormatTest01 {public static void main(String[] args) {// java.text.DecimalFormat专门负责数字格式化的。//DecimalFormat df = new DecimalFormat("数字格式");DecimalFormat df = new DecimalFormat("###,###.##");//String s = df.format(1234.56);String s = df.format(1234.561232);System.out.println(s); // "1,234.56"DecimalFormat df2 = new DecimalFormat("###,###.0000"); //保留4个小数位,不够补上0String s2 = df2.format(1234.56);System.out.println(s2); // "1,234.5600"}
}

大数据:

双精度浮点型变量double可以处理16位有效数,一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理。但在实际应用中,可能需要对更大或者更小的数进行运算和处理,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。

常用构造函数:

  1. BigDecimal(int)
    创建一个具有参数所指定整数值的对象。
  2. BigDecimal(double)
    创建一个具有参数所指定双精度值的对象
  3. BigDecimal(long)
    创建一个具有参数所指定长整数值的对象
  4. BigDecimal(String)
    创建一个具有参数所指定以字符串表示的数值的对象

常用方法:

  1. add(BigDecimal)
    BigDecimal对象中的值相加,返回BigDecimal对象
  2. subtract(BigDecimal)
    BigDecimal对象中的值相减,返回BigDecimal对象
  3. multiply(BigDecimal)
    BigDecimal对象中的值相乘,返回BigDecimal对象
  4. divide(BigDecimal)
    BigDecimal对象中的值相除,返回BigDecimal对象
  5. toString()
    将BigDecimal对象中的值转换成字符串(输出BigDecimal对象会调用toString方法)
  6. doubleValue()
    将BigDecimal对象中的值转换成双精度数
  7. floatValue()
    将BigDecimal对象中的值转换成单精度数
  8. longValue()
    将BigDecimal对象中的值转换成长整数
  9. intValue()
    将BigDecimal对象中的值转换成整数
import java.math.BigDecimal;public class BigDecimalTest01 {public static void main(String[] args) {// 这个100不是普通的100,是精度极高的100BigDecimal v1 = new BigDecimal(100);// 精度极高的200BigDecimal v2 = new BigDecimal(200);// 求和// v1 + v2; // 这样不行,v1和v2都是引用,不能直接使用+求和。BigDecimal v3 = v1.add(v2); // 调用方法求和。System.out.println(v3); //300BigDecimal v4 = v2.divide(v1);System.out.println(v4); // 2}
}

BigDecimal大小比较:

java中对BigDecimal比较大小一般用的是bigdemical的compareTo方法

int a = bigdemical.compareTo(bigdemical2)// a = -1,表示bigdemical小于bigdemical2;
// a = 0,表示bigdemical等于bigdemical2;
// a = 1,表示bigdemical大于bigdemical2;

除法的时候出现异常

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

原因分析:

通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常。

解决方法:

divide方法设置精确的小数点,如:divide(xxxxx,2)

工具类推荐:

package com.vivo.ars.util;
import java.math.BigDecimal;/*** 用于高精确处理常用的数学运算*/
public class ArithmeticUtils {//默认除法运算精度private static final int DEF_DIV_SCALE = 10;/*** 提供精确的加法运算** @param v1 被加数* @param v2 加数* @return 两个参数的和*/public static double add(double v1, double v2) {BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.add(b2).doubleValue();}/*** 提供精确的加法运算** @param v1 被加数* @param v2 加数* @return 两个参数的和*/public static BigDecimal add(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.add(b2);}/*** 提供精确的加法运算** @param v1    被加数* @param v2    加数* @param scale 保留scale 位小数* @return 两个参数的和*/public static String add(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供精确的减法运算** @param v1 被减数* @param v2 减数* @return 两个参数的差*/public static double sub(double v1, double v2) {BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.subtract(b2).doubleValue();}/*** 提供精确的减法运算。** @param v1 被减数* @param v2 减数* @return 两个参数的差*/public static BigDecimal sub(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.subtract(b2);}/*** 提供精确的减法运算** @param v1    被减数* @param v2    减数* @param scale 保留scale 位小数* @return 两个参数的差*/public static String sub(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供精确的乘法运算** @param v1 被乘数* @param v2 乘数* @return 两个参数的积*/public static double mul(double v1, double v2) {BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.multiply(b2).doubleValue();}/*** 提供精确的乘法运算** @param v1 被乘数* @param v2 乘数* @return 两个参数的积*/public static BigDecimal mul(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.multiply(b2);}/*** 提供精确的乘法运算** @param v1    被乘数* @param v2    乘数* @param scale 保留scale 位小数* @return 两个参数的积*/public static double mul(double v1, double v2, int scale) {BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return round(b1.multiply(b2).doubleValue(), scale);}/*** 提供精确的乘法运算** @param v1    被乘数* @param v2    乘数* @param scale 保留scale 位小数* @return 两个参数的积*/public static String mul(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到* 小数点以后10位,以后的数字四舍五入** @param v1 被除数* @param v2 除数* @return 两个参数的商*/public static double div(double v1, double v2) {return div(v1, v2, DEF_DIV_SCALE);}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指* 定精度,以后的数字四舍五入** @param v1    被除数* @param v2    除数* @param scale 表示表示需要精确到小数点以后几位。* @return 两个参数的商*/public static double div(double v1, double v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();}/*** 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指* 定精度,以后的数字四舍五入** @param v1    被除数* @param v2    除数* @param scale 表示需要精确到小数点以后几位* @return 两个参数的商*/public static String div(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v1);return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 提供精确的小数位四舍五入处理** @param v     需要四舍五入的数字* @param scale 小数点后保留几位* @return 四舍五入后的结果*/public static double round(double v, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b = new BigDecimal(Double.toString(v));return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();}/*** 提供精确的小数位四舍五入处理** @param v     需要四舍五入的数字* @param scale 小数点后保留几位* @return 四舍五入后的结果*/public static String round(String v, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b = new BigDecimal(v);return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 取余数** @param v1    被除数* @param v2    除数* @param scale 小数点后保留几位* @return 余数*/public static String remainder(String v1, String v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();}/*** 取余数  BigDecimal** @param v1    被除数* @param v2    除数* @param scale 小数点后保留几位* @return 余数*/public static BigDecimal remainder(BigDecimal v1, BigDecimal v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}return v1.remainder(v2).setScale(scale, BigDecimal.ROUND_HALF_UP);}/*** 比较大小** @param v1 被比较数* @param v2 比较数* @return 如果v1 大于v2 则 返回true 否则false*/public static boolean compare(String v1, String v2) {BigDecimal b1 = new BigDecimal(v1);BigDecimal b2 = new BigDecimal(v2);int bj = b1.compareTo(b2);boolean res;if (bj > 0)res = true;elseres = false;return res;}
}

随机数生成方法random():

import java.util.Random;public class RandomTest01 {public static void main(String[] args) {// 创建随机数对象Random random = new Random();// 随机产生一个int类型取值范围内的数字。int num1 = random.nextInt();System.out.println(num1);// 产生[0~100]之间的随机数。不能产生101。(不产生负数)// nextInt翻译为:下一个int类型的数据是101,表示只能取到100.int num2 = random.nextInt(101); //不包括101System.out.println(num2);}
}

参考文献:

Java:数字格式化(详细版)_哆啦A梦_i的博客-CSDN博客

Java之BigDecimal详解_HuaToDevelop的博客-CSDN博客

数字格式化、大数据BigDecimal、随机数生成方法random()相关推荐

  1. 电子沙盘数字沙盘大数据可视化GIS系统开发教程第16课

    电子沙盘数字沙盘大数据可视化GIS系统开发教程第16课:新增加属性在MTGIS3d控件 public bool ShowFLGrid;//是否显 示方里网格. public bool Atmosphe ...

  2. 大数据时代 | 数据分析方法及理论详解

    大数据时代 | 数据分析方法及理论详解 1 数据分析前,我们需要思考 像一场战役的总指挥影响着整个战役的胜败一样,数据分析师的思想对于整体分析思路,甚至分析结果都有着关键性的作用. 2 分析问题和解决 ...

  3. 大数据可视化的方法和价值

    数据可视化平台是是通过三维表现技术来表示复杂的信息,实现对海量数据的立体体现.可视化技术借鉴人脑的视觉展现能力,通过挖掘重要数据之间的关联关系将若干关联性的可视化数据进行汇总处理.揭示数据中隐含的关联 ...

  4. 大数据可视化的方法、挑战及进展

    大数据可视化的方法.挑战及进展 摘要:在简化数据量和降低大数据应用的复杂性中,大数据分析发挥着关键的作用.可视化是其中一个重要的途径,它能够帮助大数据获得完整的数据视图并挖掘数据的价值.大数据分析和可 ...

  5. 深圳大数据学习:方法的嵌套--【千锋】

    深圳大数据学习:方法的嵌套–[千锋] 方法里嵌套定义其他方法 示例1 object EmbedDemo { def add3(x:Int,y:Int,z:Int)={ def add2(x:Int,y ...

  6. 电子沙盘数字沙盘大数据可视化交互地理信息系统开发教程第8课

    多点触摸三维电子沙盘可视化交互地理信息系统(M3D GIS)(平衡+极简+实用)TREND MTOUCH 3D GIS(English)自主知识产权的通过手势多点触摸控制的大型二.三维一体化地理信息系 ...

  7. 【2017年第2期】大数据的价值发现方法

    杜小勇1,陈跃国2 1. 数据工程与知识工程教育部重点实验室(中国人民大学),北京 100872:2. 中国人民大学信息学院,北京 100872 摘要:大数据的价值有不同的体现形式和发现价值的途径.总 ...

  8. oracle 孙帅_农村居民点空间大数据平台构建方法研究

    农村居民点空间大数据平台构建方法研究 孙帅,王彪 (北方工业大学建筑与艺术学院,北京 100144 ) [摘 要] 通过低空无人机实景建模技术,采集并构建农村居民点空间大数据平 台.充分发掘海量空间数 ...

  9. Data.FireDACJSONReflect多数据集与压缩字节流化的加密的JSon序列化-Delphi 10大数据的实现方法之Json序列化

    Data.FireDACJSONReflect多数据集与压缩字节流化的加密的JSon序列化-Delphi 10大数据的实现方法之Json序列化 uses Data.FireDACJSONReflect ...

最新文章

  1. Python 面向对象封装和继承
  2. 阿里巴巴DevOps实践指南 | 为什么DevOps的必然趋势是BizDevOps?
  3. mongodb 安装、启动
  4. 一步步编写操作系统 67 系统调用的实现1-2 68
  5. cas4.2.7实现单点登录
  6. 【GPU编程】开始Cg之旅,编译自己的第一个Cg程序
  7. Ubuntu中使用pip3报错
  8. 时域离散随机信号的统计特性
  9. Qt学习之QDir的使用(使用QDir创建文件夹)
  10. 解决 mac系统下sublime imput 函数交互问题
  11. 三极管分压共射放大电路
  12. UE4中文汉字字体制作
  13. 神探狄仁杰是一个Debug高手
  14. SDN:mininet交换机流表操作
  15. 【前端技术】一篇文章搞掂:HTML
  16. Makefile中=, :=, ?=和+=的含义
  17. 如何基于场景设计产品-笔记(20160418)
  18. 高德地图(AMap)JavaScript API的使用
  19. 史上最简单的Elasticsearch教程:SpringBoot集成Elasticsearch 实时流量监测平台
  20. 清云小程序教程十六:主轴与交叉轴二

热门文章

  1. CentOS8搭建实现私有CA和证书申请
  2. 技术人员应该具备的几项基本技能
  3. 自建局域网 OTA 服务器
  4. KAL 推出 Kalignite Hypervisor 解决方案—引领 ATM 硬件更新创新模式
  5. lineNumber: 1; columnNumber: 15; XML 声明中 version 后面跟随的值必须是用引号括起来的字符串。
  6. 【论文笔记】AAAI2022多智能体强化学习论文五篇
  7. 利用python画空间分布图
  8. 计算机软考高级证自明评职称,IT领域唯一的国家级证书,好处多多,入手不亏...
  9. 拼多多2020校招部分编程题
  10. Pycharm debug崩溃、长时间不响应 解决