java格式化数字 NumberFormat及DecimalFormat

news2024/11/17 11:44:58

一、JavaAPI官方描述

1、NumberFormat

NumberFormat帮助您格式化和解析任何区域设置的数字。您的代码可以完全独立于小数点,千位分隔符的区域设置约定,甚至是使用的特定十进制数字,或者数字格式是否为十进制。

2、 DecimalFormat

DecimalFormat是NumberFormat十进制数字格式的具体子类 。它具有多种功能,旨在解析和格式化任何语言环境中的数字,包括支持西方,阿拉伯语和印度语数字。它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元)。所有这些都可以本地化。

二、NumberFormat详解

1、获取NumberFormat实例


//创建 一个整数格式 地区用系统默认的
NumberFormat integerNumber = NumberFormat.getIntegerInstance(Locale.getDefault());

  1. 使用getInstance或getNumberInstance获取正常的数字格式。
  2. 使用getIntegerInstance得到的整数格式。
  3. 使用getCurrencyInstance来获取货币数字格式。
  4. 使用getPercentInstance获取显示百分比的格式。

2、常用方法

在这里插入图片描述

3、NumberFormat类的使用

要使用NumberFormat类,首先需要使用NumberFormat类的静态方法getNumberInstance()来获取一个NumberFormat实例,然后可以使用实例的format()方法将数字转换为字符串形式,也可以使用实例的parse()方法将字符串转换为数字形式。

4.NumberFormat类使用示例

// 1.创建一个实例
NumberFormat numberFormat = NumberFormat.getNumberInstance();
// 2.设置小数点后的位数
numberFormat.setMaximumFractionDigits(2);
// 3.设置是否使用千分位分隔符
numberFormat.setGroupingUsed(false);
// 4.将数字123456.789格式化为字符串“123456.79”
String result1 = numberFormat.format(123456.789);
System.out.println(result1); //输出结果:123456.79


三、DecimalFormat详解

1、获取NumberFormat实例

要获取特定地区(包括默认地区)的NumberFormat,请调用NumberFormat的工厂方法之一,例如getInstance()。通常,不要直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能返回DecimalFormat之外的子类。如果需要自定义format对象,可以这样做:

        try {
            NumberFormat f = NumberFormat.getInstance(Locale.getDefault());
            if (f instanceof DecimalFormat) {
                ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
                //写具体的代码
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

设置Pattern

DecimalFormat作为NumberFormat的具体实现子类,最大的特点就是 可以使用Pattern。来实现最大程度的对数据格式进行定制。
一个Pattern中的许多字符是按字面意思理解的;它们在解析期间匹配,在格式化期间输出不变,就是字符在Pattern中 不影响最后的数字格式化另一方面,特殊字符代表其他字符、字符串或字符类。如果要以文字形式出现在前缀或后缀中,必须引用它们(除非另有说明)。

在这里插入图片描述

2、子类特有的方法

在这里插入图片描述

3、代码示例

        //创建一个默认的通用格式
        NumberFormat numberFormat = NumberFormat.getInstance();
        DecimalFormat numberDecimalFormat;
        //捕捉异常,以防强制类型转换出错
        try {
            //强制转换成DecimalFormat
            numberDecimalFormat = (DecimalFormat) numberFormat;
            //保留小数点后面三位,不足的补零,前面整数部分 每隔四位 ,用 “,” 符合隔开
            numberDecimalFormat.applyPattern("#,####.000");
            //设置舍入模式 为DOWN,否则默认的是HALF_EVEN
            numberDecimalFormat.setRoundingMode(RoundingMode.DOWN);
            //设置 要格式化的数 是正数的时候。前面加前缀
            numberDecimalFormat.setPositivePrefix("Prefix  ");
            System.out.println("正数前缀  "+numberDecimalFormat.format(123456.7891));
            //设置 要格式化的数 是正数的时候。后面加后缀
            numberDecimalFormat.setPositiveSuffix("  Suffix");
            System.out.println("正数后缀  "+numberDecimalFormat.format(123456.7891));
            //设置整数部分的最大位数
            numberDecimalFormat.setMaximumIntegerDigits(3);
            System.out.println("整数最大位数 "+numberDecimalFormat.format(123456.7891));
            //设置整数部分最小位数
            numberDecimalFormat.setMinimumIntegerDigits(10);
            System.out.println("整数最小位数 "+numberDecimalFormat.format(123456.7891));
            //设置小数部分的最大位数
            numberDecimalFormat.setMaximumFractionDigits(2);
            System.out.println("小数部分最大位数 "+numberDecimalFormat.format(123.4));
            //设置小数部分的最小位数
            numberDecimalFormat.setMinimumFractionDigits(6);
            System.out.println("小数部分最小位数 "+numberDecimalFormat.format(123.4));
        }catch (Exception e){
            e.printStackTrace();
        }

四、DecimalFormat类符号含义

DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。上面的例子包含了差不多所有的基本用法,如果你想了解更多,请参考 DecimalFormat 类的文档。

符号含义:

0 一个数字

‘#’ 一个数字,不包括 0

. 小数的分隔符的占位符

, 分组分隔符的占位符

; 分隔格式。

  • 缺省负数前缀。

% 乘以 100 和作为百分比显示

? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用 国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代 替十进制分隔符。

X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。

DecimalFormat df1 = new DecimalFormat("0.0"); 
DecimalFormat df2 = new DecimalFormat("#.#"); 
DecimalFormat df3 = new DecimalFormat("000.000"); 
DecimalFormat df4 = new DecimalFormat("###.###"); 

System.out.println(df1.format(12.34)); //12.3
System.out.println(df2.format(12.34)); //12.3
System.out.println(df3.format(12.34)); //012.340
System.out.println(df4.format(12.34)); //12.34

import java.text.DecimalFormat;
public class Test{



    public static void main(String[] args){
        
        double pi=3.1415927;//圆周率
        //取一位整数 
        System.out.println(new DecimalFormat("0").format(pi));//3
        //取一位整数和两位小数  
        System.out.println(new DecimalFormat("0.00").format(pi));//3.14
        //取两位整数和三位小数,整数不足部分以0填补。  
        System.out.println(new DecimalFormat("00.000").format(pi));//03.142  
        //取所有整数部分  
        System.out.println(new DecimalFormat("#").format(pi));//3  
        //以百分比方式计数,并取两位小数  
        System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%  
        long c=299792458;//光速  
        //显示为科学计数法,并取五位小数  
        System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8  
        //显示为两位整数的科学计数法,并取四位小数  
        System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7  
        //每三位以逗号进行分隔。  
        System.out.println(new DecimalFormat(",###").format(c));//299,792,458  
        //将格式嵌入文本  
        System.out.println(new DecimalFormat("光速大小为每秒,###米").format(c)); //光速大小为每秒299,792,458米

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之YUM管理工具

目录 Linux之YUM管理工具 定义 实现YUM的三个机制 RHEL8中yum源变化说明 案例 示例1 --- 建立本地光盘源(本地yum源) 示例2 --- 配置互联网源 yum(dnf)工具管理软件包 安装软件包 module子命令 案例 yum-config-manager的使用 定义 yum-conf…

Linux系统如何配置网络

Linux系统的三种网络模式: 桥接:可以和外部设备通信,主机和Ubuntu分别使用不同的IP地址NAT:可以和外部设备通信,主机和Ubuntu公用一个IP地址主机:只能和主机通信 在此我们介绍如何配置桥接网络&#xff1…

谓词的介绍与基本使用

🚨谓词 🚦概念 1.返回类型为bool的仿函数 2.接受一个参数—一元谓词 接受一个参数—二元谓词 🚀1.一元谓词 ⛽使用方法 因为返回值为bool类型,所以经常会将他使用成判断关系的函数 我们使用find_if()对…

HBase 2.3.7中snappy压缩配置

本文将介绍如何在HBase 2.3.7中配置snappy压缩。snappy是一种快速的数据压缩和解压缩算法,可以提高HBase的存储空间利用率和读写性能。本文将使用HBase 2.3.7版本,运行在三个Ubuntu系统的虚拟机中,分别作为master和slave节点。 主要步骤如下…

【SpringBoot】SpringBoot Starter 作用及原理

文章目录 前言一、什么是 Starter二、Starter 的作用三、spring 整合组件四、spring-boot 整合组件五、Starter 原理 前言 有没有在入行后直接基于 SpringBoot 开发项目,没有 spring、servlet 开发经历的? 有没有用 SpringBoot 开发项目,但是第一次听…

服务注册中心Eureka

服务注册中心Eureka Eureka介绍Eureka 环境搭建Eureka 集群配置Eureka 的自我保护模式Eureka 架构图 Eureka介绍 在微服务架构中,有着许许多多的微服务,微服务之间需要彼此进行远程调用,需要知道彼此的地址,通过人工的方式去管理…

C++算法:加权连通图的最小生成树(Prim)

文章目录 前言一、Prim算法原理二、算法实现1、生成图2、Prim 总结原创文章,未经许可,严禁转载 前言 在前文加权连通图的最小生成树(Kruskal)中已经用以边找点的方式实现最小生成树的生成。Prim算法也是一种常用的最小生成树算法,和Kruskal不…

python 妙笔生花

1.学习编程好处 最主要的好处就是,思考问题的方式变得更加具有逻辑性。 日常我们敲代码时,需要思考每一行的代码执行效果,它就需要认真设计每行代码可用性。如果在设计上发生错误,在代码执行时就会报错。还能做到 触类旁通。 古语有云: 有道无术,术可求,有术无道,止于术…

armbian可视化查看系统的使用情况

文章目录 armbian查看系统的使用情况在终端可视化查看方式htop简介htop安装和使用的步骤 在浏览器可视化查看方式 armbian查看系统的使用情况 在终端可视化查看方式 htop简介 htop’是一款任务管理器和系统监视工具,可在Armbian Linux中使用。它提供了比默认任务…

Python使用多线程操作tif影像和HBase数据库

本文介绍使用Python的多线程技术,提高happybase模块和gdal模块的效率,从tif格式的影像文件中读取数据,并将其存储到HBase数据库中。主要步骤包括: 准备工作:安装Python环境,安装happybase模块和gdal模块&a…

windows安装jdk1.8

1.下载jdk8 https://www.oracle.com/java/technologies/downloads/#java8-windows 百度网盘: 链接: https://pan.baidu.com/s/1qtVZ3Rsa1_n9XsFcXj07rA 提取码: yhwc 2.双击以后进行JDK的安装 操作前先在D盘保存java文件夹,里面新建jdk1.8.0_241文件…

AntDB 替换某省电信大数据平台的案例分享

亚信自研分布式数据库AntDB落地某省电信的案例分享 整体介绍 某省电信大数据分析平台,需要对BSS的三户、订单、实例等近10TB级的数据进行快速分析统计,每次分析的数据量最高达到5亿级别,同时需要向其它厂商开放这种实时的数据分析能力&…

Java-API简析_java.util.Currency类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131255544 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

对象实例化空指针处理

1 问题 如何解决对象实例化空指针异常? 2 方法 首先创建一个package包,将其Menu类及相关代码放入其中,并在该package包下创建另一个类MenuItem,然后通过构造函数,写入需要运行的对象信息,最后在Menu类中用n…

leetcode 151. 反转字符串中的单词

2023.6.14 这道题全面考察了字符串的一些操作,这里我的思路是: 先对字符串进行空格去除操作,这里要注意一个细节:先用for循环去除连续空格,再用if判断开头和结尾的空格。再对没有异常空格的s 做一个反转操作。再对每一…

计算机网络基础知识(九)—— 什么是TelnetS?Telnet Over TLS

文章目录 01 | TelnetS02 | OpenSSL03 | 实现思路服务器处理流程客户端处理流程 04 | 代码实现服务端代码客户端代码编译过程 & 执行结果 前面学习了什么是HTTPS协议,了解了HTTPS的工作原理以及具体的工作流程,了解了HTTP协议和HTTPS协议之间的区别。…

SSM框架搭建

SSM环境搭建 1 IDE的话,我用的MyEcplise,如果用Ecplise的话,需要自行配置服务器。 首先,建一个Dynamic工程,需要注意的是一定要勾选上web.xml。 将Spring框架包、jstl包、standard包、common-logging包、aopallian…

系列十三、MongoDB聚合查询

一、概述 MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以: ①:作用在一个或者几个集合上; ②:对集合中的数据进行一系列的运算; ③:将这些数据转化为期望的形式; 从效果而言…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(5 - AIGC 未来展望)

文章大纲 不可避免的职业替代AI 对人类思维的影响AIGC 的风险人工智能对齐 -- 价值学习 鲁棒适应参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲多模态据预测,未来五年10%-30%的图片内容由AI参与生成,考虑到下一代互联网对内容需求的迅速提升,2030年A…

计算机网络管理 实验4(一) SNMP报文分析之验证SNMP协议的工作过程以及分析SNMP数据单元的格式

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &am…