关于DecimalFormat类的数字格式化

2023-11-16


当我们遇到小数时,必定会设置保留小数的位数,也可能会涉及数字的格式转换
那么在Java中肯定也有这样的一个类,就是DecimalFormat类能帮助我们方便快捷的解决此类小数格式的问题

DecimalFormat 类路径 java.text.DecimalFormat
DecimalFormat 的父类也是抽象类NumberFormat 类路径 java.text.NumberFormat 很有意思的是 NumberFormat 的父类是 Format
Format应该很熟悉吧,说熟悉的原因是因为他的子类 DateFormat 与 SimpleDateFormat 在日期格式的转换上经常使用到的
DecimalFormat :用于格式化十进制数字

先大概了解下 DecimalFormat 是如何进行格式化的?

基本格式化:

/*定义一个浮点型变量 Π*/
double pai = 3.1415926535;//圆周率

/*1.创建DecimalFormat对象
(在创建对象时就可以填入特殊符号格式,也可以使用applyPattern(String pattern)方法填入)
DecimalFormat decimalFormat = new DecimalFormat("0.00");就可以直接省去第二步的代码*/
DecimalFormat decimalFormat = new DecimalFormat();

/*2.定制格式
(参数就是根据DecimalFormat中的多种特殊符号来进行格式化)*/
decimalFormat.applyPattern("0.00");//比如这里的 格式:"0" 就代表只取整数部分

/*3.传入值并转换数字(format是个重载方法)单个参数返回String,多个参数返回StringBuffer*/
String format = decimalFormat.format(pai);

/*4.打印输出(保留两位小数 = 3.14)*/
System.out.println(format);


/*一行代码搞定:链式编程(节省代码量) 格式:"0.00" 代表取整数并保留两位小数*/
System.out.println(new DecimalFormat("0.00").format(pai));

上面介绍了如何对数字进行简单的格式化,下面了解 DecimalFormat 类中的几种特殊符号,不同符号代表不同的格式

不同特殊符号代码的格式:

先了解下在格式化中会用到的特殊符号(可以参考Java官方文档)DecimalFormat 类官方中文API 下图是从官方文档截的图:

在这里插入图片描述

不同符号的使用:

注:下面为了方便测试多种格式,这里就直接链式编程简化为一行代码后输出结果
给大家举一些不同格式的例子:

  1. #和0配合使用
/* 
0
	整数位的0:取所有整数位,多余位数填充0
   小数位的0:保留小数的位数,是几个0就保留几位,多余位数也会填充0
#.##
	整数位的#:取全部整数部分,多余的#不会填充0(所以写一个#就行了)
	小数位的#:代表保留小数多少位,多余的#也不会填充0
	作用与0相同,但是多余位数不会填充0
#.##%
	将数字 * 100 然后取整数部分并保留两位小数
	3.1415926 * 100 = 314.15926 格式化后为 314.16(舍入的小数部分会四舍五入)
*/

double pai = 3.1415926;//圆周率

//取一位整数
System.out.println(new DecimalFormat("0").format(pai));//3
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pai));//3.14
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pai));// 03.142
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pai));//3
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pai));//314.16%
  1. 科学计数法 E
double number = 123456789.1234;

System.out.println(new DecimalFormat("0E0").format(number));//1E8
System.out.println(new DecimalFormat("0E00").format(number));//1E08
System.out.println(new DecimalFormat("#E0").format(number));//.1E9
System.out.println(new DecimalFormat("##E0").format(number));//1.2E8
System.out.println(new DecimalFormat("###E0").format(number));//123E6
System.out.println(new DecimalFormat("####E0").format(number));//1.235E8
System.out.println(new DecimalFormat("#####E0").format(number));//1234.6E5
System.out.println(new DecimalFormat("######E0").format(number));//123.457E6
System.out.println(new DecimalFormat("#######E0").format(number));//12.34568E7
System.out.println(new DecimalFormat("########E0").format(number));//1.2345679E8
System.out.println(new DecimalFormat("#########E0").format(number));//123456789E0
System.out.println(new DecimalFormat("##########E0").format(number));//123456789.1E0
  1. 分组分隔符和减号
  • 分隔符 ,
int number = 123456789;

//每两位以逗号,进行分隔
System.out.println(new DecimalFormat(",##").format(number));//1,23,45,67,89        

//每三位以逗号,进行分隔
System.out.println(new DecimalFormat(",###").format(number));//123,,456,789

//每四位以逗号进行分隔
System.out.println(new DecimalFormat(",####").format(number));//1,2345,6789

System.out.println(new DecimalFormat("0,00").format(number));//12,99,79,24,58
  • 减号 -
    代表输出负数
double number = 3.1415926;

/*多余的整数位填充0,并保留两位小数点*/
System.out.println(new DecimalFormat("-00.00").format(number));//结果:-03.14

4.关于前缀、后缀

  • % 将数字乘以100(放大100倍)
double number = 0.05731;

System.out.println(new DecimalFormat("0.00%").format(number));//5.73%
System.out.println(new DecimalFormat("0%.00").format(number));//5.73%
System.out.println(new DecimalFormat("%0.00").format(number));//%5.73

/*0.05731 乘以 100 = 5.731 取一位整数并保留两位小数,但是如果有多余的整数位或小数位会被填充为0, % 可作为前缀 %5.73 也可做为后缀 5.73%*/
  • \u2030 将数字乘以1000(放大1000倍)
double number = 0.05731;

System.out.println(new DecimalFormat("0.00\u2030").format(number));//57.31‰
System.out.println(new DecimalFormat("0.0\u20300").format(number));//57.31‰
System.out.println(new DecimalFormat("\u20300.00").format(number));//‰57.31

/*0.05731 乘以 1000 = 57.31 取一位整数并保留两位小数,如果有多余的整数位或小数位会被填充为0, ‰ 可作为前缀 ‰57.71 也可做为后缀 57.31‰*/
  • ¤(\u00A4) 本地化货币符号
double number = 8361.123;

System.out.println(new DecimalFormat(",000.00¤").format(number));//8,361.12¥
System.out.println(new DecimalFormat(",000.¤00").format(number));//8,361.12¥
System.out.println(new DecimalFormat("¤,000.00").format(number));//¥8,361.12
System.out.println(new DecimalFormat(",00¤0.¤00").format(number));//8,361.12¥¥
System.out.println(new DecimalFormat("¤,000.¤00").format(number));//¥8,361.12¥
System.out.println(new DecimalFormat(",000.00¤¤").format(number));//8,361.12CNY

/*CNY: 人民币*/
  • 用于引用特殊的字符(自定义字符),作为前缀或后缀
double number = 9.73;

System.out.println(new DecimalFormat("'#'0.00").format(number));	//#9.73
System.out.println(new DecimalFormat("&0.00").format(number));		//&9.73
//使用'本身作为前缀或后缀 注意是两个 '
System.out.println(new DecimalFormat("''0.00").format(number));		//'9.73
System.out.println(new DecimalFormat("'^ _ ^'0.00").format(number));//^ _ ^9.73

注:DecimalFormat 提供 RoundingMode 中定义的舍入方式进行四舍五入然后格式。默认情况下,它使用 RoundingMode.HALF_EVEN
舍入方式在上一篇中已经讲到 关于BigDecimal类的常用方法与的舍入方式 其中 RoundingMode.HALF_EVEN 方式使用的是银行家舍入法
银行家舍入法:即四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一(可以去网上了解下)

大多数人如果能给更多事情一个机会的话,他们的问题都能解决
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于DecimalFormat类的数字格式化 的相关文章

随机推荐

  • 蓝牙之十七-bluedroid scan流程

    蓝牙扫描过程是指扫描蓝牙设备 app层 这里有两张截图 第一张图显示的是安卓设置setting菜单栏中有Bluetooth这一项 点进去以后 点击右上角显示如下的截图 其中Refresh就是刷新设备列表 也就会扫描设备信息 上图显示的三个菜
  • Gated Mechanism for Attention Based Multi Modal Sentiment Analysis 阅读笔记

    GATED MECHANISM FOR ATTENTION BASED MULTIMODAL SENTIMENT ANALYSIS 阅读笔记 最近在跟进多模态的情感分析发现多模态榜一又被刷下来了 这篇论文是当前时间内的最好的效果 下面就对论
  • linux服务器补丁怎么修复,linux 服务器打补丁

    linux 服务器打补丁 内容精选 换一换 MindStudio和Ascend cann toolkit开发套件包可以安装在Linux服务器上 可以使用Linux服务器上原生桌面自带的终端gnome terminal进行安装 也可以在Win
  • Python数据挖掘-机器学习

    目录 零 概念 算法 开发流程 一 机器学习概述 1 数据集 1 sklearn自带数据集应用 2 数据集划分 二 特征工程 1 特征抽取 1 字典特征提取 sklearn feature extraction DictVectorizer
  • windows下修改mysql时区设置

    root身份登录MySQL mysql u root p 查看time zone变量 show variables like time zone 显示 time zone 变量 设置time zone变量 set time zone 08
  • dobbo源码解析目录地址

    肥朝 Dubbo 源码解析 作者 肥朝 博客 http www jianshu com u f7daa458b874 目录 Dubbo 源码解析 集群容错架构设计 Dubbo 源码解析 Directory Dubbo 源码解析 Router
  • 模糊匹配之——BK树与拼写纠正

    介绍 拼写纠错功能常常出现在比较高级的文本编辑应用中 例如大家熟知的word 高级一点的IDE例如Jet Brains系列 在一些在线翻译上 也有自动校正拼写的功能 例如谷歌翻译 原理 拼写纠正的实现方式有多种 这里使用的是一种名为BK树的
  • 【Java项目推荐】值得写到简历上的项目--黑马点评

    优惠卷秒杀 前言 优惠券秒杀 实现优惠券秒杀下单 超卖问题 一人一单 分布式锁 redis中加锁的一些特殊情况 手动实现分布式锁 分布式锁误删情况1 分布式锁误删情况2 lua脚本解决多条命令的原子性问题 Redisson 秒杀优化 异步秒
  • Mac使用Python接入东方财富量化接口Choice,调试与获取数据

    这篇博客用来把在Mac平台上使用python接入东方财富Choice接口的流程细化并重写 官方文档有些地方说的太含糊了 有的地方博主尝试了多种方法才试出来 这里直接把标准答案给到大家 尽量避坑吧 吐槽 同花顺科技感很足 赞 但是没有Mac版
  • 什么是虚拟键码、虚拟密钥码、扫描码

    虚拟键码 虚拟密钥码 扫描码
  • spring_boot-启动错误笔记

    2018 07 15 17 15 42 443 INFO 10892 restartedMain s b a e w s WebMvcEndpointHandlerMapping Mapped actuator health methods
  • ElementUI tabs标签页样式改造美化

    今天针对ElementUI的Tabs标签页进行了样式修改 更改为如下图所属的样子 在线运行地址 JSRUN项目 ElementUI tabs标签页样式改造 大家如果有需要可以拿来修改使用 下面我也简单的贴上代码 代码没有注释 很抱歉 时间比
  • python的运行方式有哪两种 有何区别_python程序的两种运行方式是什么

    python程序的两种运行方式是什么 第一种方式 REPL 所谓REPL即read eva print loop 读取 计算 打印 循环 实现REPL运行方式有以下两种 1 IDLE 集成开发环境或集成开发和学习环境 是Python的集成开
  • 在ESXi安装ubuntu中,ubuntu20.04是LVM管理的,lvm盘只有识别100G ,需扩展逻辑卷来使用更多的空间

    sudo fdisk l Device Start End Sectors Size Type dev sda1 2048 4095 2048 1M BIOS boot dev sda2 4096 4198399 4194304 2G Li
  • SpringCloud中Hystrix中熔断器的简单配置和调用

    SpringCloud中Hystrix组件 用于在云环境中远程调用方法失败后的处理机制 它通过配置一个处理类实现接口重写其方法提供调用失败后的紧急处理 是一个非常好用的组件 1 首先在没有配置熔断器之前启动项目访问 只启动了一个模块 注册中
  • docker dbus-x11

    本来想用terminator启动nvidia docker 显示出图形界面的 结果发现启动的时候出问题了 terminator 1 dbind WARNING 07 31 53 725 Couldn t connect to accessi
  • Java接口登录实现页面跳转

    方式一 在Java中 可以通过使用接口和实现类来实现页面跳转功能 以下是一个简单的示例代码 首先 创建一个接口 例如LoginService public interface LoginService void login String u
  • linux设备驱动归纳总结(六):1.中断的实现

    一 什么是中断 中断分两种 1 中断 又叫外部中断或异步中断 它的产生是由于外设向处理器发出中断请求 其中外部中断也有两种 这是由配置寄存器设定的 普通中断请求 IRQ 和快速中断请求 FIQ 一般地 linux下很少使用快速中断请求 2
  • OVP电路应用(一)_12V电源_DIO1280

    目录 前言 一 基本信息 二 基本电气特性 1 PIN定义 2 电气特性 3 OVP值的设置 4 时序 5 其他 三 实际设计案例 1 电路原理图 PCB Layout 2 测试 3 问题与对策 四 USB的VBUS应用 其他举例 1 电路
  • 关于DecimalFormat类的数字格式化

    文章目录 基本格式化 不同特殊符号代码的格式 不同符号的使用 当我们遇到小数时 必定会设置保留小数的位数 也可能会涉及数字的格式转换 那么在Java中肯定也有这样的一个类 就是DecimalFormat类能帮助我们方便快捷的解决此类小数格式