用 DecimalFormat 格式化数字

Android进阶之路 - 盈利、亏损金额格式化 在金融类型的app中,关于金额、数字都相对敏感和常见一些,在此仅记录我在金融行业期间学到的皮毛,如后续遇到新的场景也会加入该篇 阅读详情

用 DecimalFormat 格式化数字

引言
Java中对浮点数的输出表示
在Java中浮点数包括基本型float、double,以及对象包装类型的Float和Double,对于这些浮点数的输出,不管是显式地还是隐式地调用toString()得到它的表示字串,输出格式都是按照如下规则进行的
如果绝对值大于0.001、小于10000000,那么就以常规的小数形式表示。   
如果在上述范围之外,则使用科学计数法表示。即类似于1.234E8的形式。

可以使用 java.text.DecimalFormat及其父类NumberFormat格式化数字
本例只浅述DecimalFormat的使用。

Pattern
0 - 如果对应位置上没有数字,则用零代替
# - 如果对应位置上没有数字,则保持原样(不用补);如果最前、后为0,则保持为空。
正负数模板用分号(;)分割

Number Format Pattern Syntax
You can design your own format patterns for numbers by following the rules specified by the following BNF diagram:
pattern    := subpattern{;subpattern}
subpattern := {prefix}integer{.fraction}{suffix}
prefix     := '//u0000'..'//uFFFD' - specialCharacters
suffix     := '//u0000'..'//uFFFD' - specialCharacters
integer    := '#'* '0'* '0'
fraction   := '0'* '#'*

DEMO
value
123456.789

pattern
,###.###

output
123,456.789

Explanation
The pound sign (#) denotes a digit,
the comma(逗号) is a placeholder for the grouping separator,
and the period(句号) is a placeholder for the decimal separator.
井号(#)表示一位数字,逗号是用于分组分隔符的占位符,点是小数点的占位符。
如果小数点的右面,值有三位,但是式样只有两位。format方法通过四舍五入处理。

value
123.78

pattern
000000.000

output
000123.780

Explanation
The pattern specifies leading and trailing zeros,
because the 0 character is used instead of the pound sign (#).

应用实例 1:
/* * Copyright (c) 1995-1998 Sun Microsystems, Inc. All Rights Reserved. */
import java.util.*;
import java.text.*;
public class DecimalFormatDemo {
 static public void customFormat(String pattern, double value ) {
  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + " " + pattern + " " + output);
 }
 static public void localizedFormat(String pattern, double value, Locale loc ) {
  NumberFormat nf = NumberFormat.getNumberInstance(loc);
  DecimalFormat df = (DecimalFormat)nf;
  df.applyPattern(pattern);
  String output = df.format(value);
  System.out.println(pattern + " " + output + " " + loc.toString());
 }
 static public void main(String[] args) {
  customFormat("###,###.###", 123456.789);
  customFormat("###.##", 123456.789);
  customFormat("000000.000", 123.78);
  customFormat("$###,###.###", 12345.67);
  customFormat("/u00a5###,###.###", 12345.67);
  Locale currentLocale = new Locale("en", "US");
  DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(currentLocale);
  unusualSymbols.setDecimalSeparator('|');
  unusualSymbols.setGroupingSeparator('^');
  String strange = "#,##0.###";
  DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols);
  weirdFormatter.setGroupingSize(4);
  String bizarre = weirdFormatter.format(12345.678);
  System.out.println(bizarre);
  Locale[] locales = { new Locale("en", "US"),
         new Locale("de", "DE"),
         new Locale("fr", "FR") };
  for (int i = 0; i < locales.length; i++) {
   localizedFormat("###,###.###", 123456.789, locales[i]);
  }
 }
}

应用实例 2:
参见:Mark Leung的学习总结
     http://blog.youkuaiyun.com/marcoleung/archive/2004/11/11/176514.aspx
public class test
{
    public test()
    {
    //---------------------------------------------
    //定义一个数字格式化对象,格式化模板为".##",即保留2位小数.
    DecimalFormat a = new DecimalFormat("##.##");
    String s= a.format(03.03035);
    System.err.println(s);
    String s= a.format(03.30);
    System.err.println(s);
    String s= a.format(03.335);
    System.err.println(s);
    String s= a.format(03.3);
    System.err.println(s);
    //说明:如果小数点后面不够2位小数,不会补零.参见Rounding小节
    //---------------------------------------------

    //-----------------------------------------------
    //可以在运行时刻用函数applyPattern(String)修改格式模板
    //保留2位小数,如果小数点后面不够2位小数会补零
    a.applyPattern("00.00");
    s = a.format(333.3);
    System.err.println(s);
    //------------------------------------------------

    //------------------------------------------------
    //添加千分号
    a.applyPattern(".##/u2030");
    s = a.format(0.78934);
    System.err.println(s);//添加千位符后,小数会进三位并加上千位符
    //------------------------------------------------

    //------------------------------------------------
    //添加百分号
    a.applyPattern("#.##%");
    s = a.format(0.78645);
    System.err.println(s);
    //------------------------------------------------

   //------------------------------------------------
    //添加前、后修饰字符串,记得要用单引号括起来
    a.applyPattern("'这是我的钱$',###.###'美圆'");
    s = a.format(2533333443.3333);
    System.err.println(s);
    //------------------------------------------------

     //------------------------------------------------
    //添加货币表示符号(不同的国家,添加的符号不一样
    a.applyPattern("/u00A4");
    s = a.format(34);
    System.err.println(s);
    //------------------------------------------------

    //-----------------------------------------------
    //定义正负数模板,记得要用分号隔开
     a.applyPattern("0.0;'@'-#.0");
     s = a.format(33);
     System.err.println(s);
     s = a.format(-33);
     System.err.println(s);
     //-----------------------------------------------

    //综合运用,正负数的不同前后缀
    String pattern="'my moneny'###,###.##'RMB';'ur money'###,###.##'US'";
    a.applyPattern(pattern);
    System.out.println(a.format(-1223233.456));
  }


    public static void main(String[] args)
    {
        test test1 = new test();
    }
}


Android实现的数字格式化用法示例 本文实例讲述了Android实现的数字格式化用法。分享给大家供大家参考,具体如下: package formatnumber; import java.text.DecimalFormat; public class FormatNumber { public static void main(String[] args) { DecimalFormat df = new DecimalFormat(); double data = 1234.56789; System.out.println(格式化之前的数字: + data); String style = 0.0;//定义要显 立即下载

相关推荐

Android金额输入框只允许输入小数点后两位效果

一:要实现这个效果也不是很复杂,只需要设置输入框输入的字符类型、设置InputFilter、设置输入变化监听即可。下面直接来看代码吧…. 二:new 一个class extends AppCompatEditText并写上一个初始化函数 private void init() { //设置输入框允许输入的类型(正则) //对应的布局属性是--->android:digits=0123456789. setKeyListener(DigitsKeyListener.getInstance(0123456789.)); //设置输入字符 setFilters(new

android 中金额格式化,Android数字格式化

保留N位小数,下面以保留两位小数为例:方案一:public static String formatNumber(double number){String result = "";try {DecimalFormat decimalFormat =new DecimalFormat("0.00");//构造方法的字符格式这里如果小数不足2位,会以0补足.result = decimalForma...

weixin_29940495的博客 858

Verilog除法器(32位无符号+带符号)

32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从“部分余数”中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a reg_b 存放除数b reg_r 存放余数(初始清零) 具体做法: 做减法时,减数是reg_b中的除数,被减数是reg_r中的余数左移一位,最低位由reg_q(被除数)的最高位补充。为了能够判断相减结果的正...

qq_38600065的博客 1万+

ASP.NET设置数据格式与String.Format使用总结

ASP.NET设置数据格式与String.Format使用总结{0:d} YY-MM-DD{0:p} 百分比00.00%{0:N2} 12.68{0:N0} 13{0:c2} $12.68{0:d}  3/23/2003{0:T}  12:00:00 AM{0:男;;女} DataGrid-数据格式设置表达式 数据格式设置表达式 .NET Frame

Infected_U2 1818

LVGL v9的lv_scale控件实战:5分钟打造动态仪表盘(附完整代码)

本文详细介绍了LVGL v9中lv_scale控件的实战应用,通过5个关键步骤快速打造动态仪表盘。文章涵盖核心特性解析、代码实现、样式定制及性能优化,适用于工业HMI、智能家居等场景,并附完整代码示例。

gin88的博客 262

QEMU pcie config空间访问机制

而pci_host_conf/data_le_ops的定义是在hw/pci/pci-host.c里,对于0xCF8端口的处理,因为是地址选通,所以只需要在write的时候记录、read的时候返回记录的值即可。而pci_host_config_write/read_common接口,在前256Bconfig空间的模拟中,也同样是会调用这个接口,所以后续的处理都是一样的。这是真实的硬件设计,而对于QEMU+KVM的虚机场景,显然是要基于硬件实现和虚拟化的需求设计虚机访问config空间的完整流程。

leiyanjie8995的博客 1953

java格式化数字 NumberFormat及DecimalFormat

前言 以前用到要对数字格式的地方,都是直接到网上搜一下。拿过来能用就行。因为平时用的不多。但是最近的项目对这个用的多了。网上拿来的不够用了。自己看了java源码把这方面恶补了。而且最近也好长时间没有写博客了。正好写一篇抛砖引玉吧。 正文 如果你对java源码比较了解。你会发现java对文字,数字的格式化,是有一个公共的父类的Format。 NumberFormat和DecimalFormat都是它...

知我饭否 8万+

YOLO十年演进:从CNN到Transformer再到MoE,我看懂了2026年目标检测的落地风向标

技术永远是为业务服务的,能解决真实问题的技术,才是有价值的。YOLO的十年演进,从CNN到Transformer再到MoE,从来都不是学术上的炫技,而是一步一步解决工业落地的痛点:从让实时检测成为可能,到解决复杂场景的漏检误检,再到打破精度和算力的死局,每一步都踩在了工业落地的真实需求上。很多新入行的朋友,总喜欢追新,今天换Transformer,明天堆MoE,觉得模型越新、参数越大,就越厉害。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 748

关于DecimalFormat类的数字格式化

当我们遇到小数时,必定会设置保留小数的位数,也可能会涉及数字的格式转换。 那么在Java中肯定也有这样的一个类,就是DecimalFormat类能帮助我们方便快捷的解决此类小数格式的问题。 DecimalFormat 类路径 java.text.DecimalFormat DecimalFormat 的父类也是抽象类NumberFormat 类路径 java.text.NumberFormat 很有意思的是 NumberFormat 的父类是 Format Format应该很熟悉吧,说熟悉的原因是因为他的

不要用过去的错误约束现在的自己。 4967

vue:npm安装pnpm报错,npm ERR! code ENOTFOUND,npm ERR! syscall getaddrinfo,npm ERR! errno ENOTFOUND详细排查解决!

vue2 vue3,npm install -g pnpm 安装出现错误,安装pnpm及解决安装失败问题,解决 npm无法安装pnpm问题,npm 安装 pnpm 时 报错 npm ERR! code ENOTFOUND,pnpm无法安装报错,vue npm install -g pnpm安装报错,request to http://registry.cnpmjs.org/pnpm failed, reason: getaddrinfo ENOTFOUND registry.cnpmjs.org,安装pnp

✅ 精选推荐文章 3608

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1452

DecimalFormat()格式化输出数字

有时我们需要控制输出的数字的格式,如何使用java的类库做到这个呢?  也许你不关心格式,但是你需要关心你的程序可以在全世界通用,像下面的这样一个简单的语句是依赖地区的:      System.out.println(1234.56);  在美国,"." 是小数点,但在其它地方就不一定了。如何处理这个呢?  java.text 包中的一些包可以处理这类问题。下面的简单范例使用那些类解决上

奋斗的PIG 1865

YOLOv11改进 | 损失函数改进篇 | 2024最新高质量的目标检测边界框回归损失Unified-IoU、FocalUIoU、FocalInvUIoU(设置动态epoch参数)

本文给大家带来的改进机制是最近新提出的高质量的目标检测边界框回归损失,其通过动态调整模型对不同质量预测框的关注,优化目标检测中的边界框回归精度。UIoU引入了FocalBox方法,通过缩放预测框与真实框分配权重,并采用了退火策略(引入动态参数epoch),逐渐将模型的注意力从低质量预测框转移到高质量预测框,平衡了训练速度与检测精度。其还有一定的解决样本不平衡问题,同时该损失函数可以和现有的任何边界框回归损失函数进行结合,例如ShapeIoU和其结合可以形成二次创新,它是一种类似于之前的Inner的机制.

Snu77的博客 4587

使用DecimalFormat进行数字的格式化

Java代码   //获取DecimalFormat的方法DecimalFormat.getInstance();      public static void test1(DecimalFormat df) {           //默认显示3位小数           double d = 1.5555555;           System.out

Elim的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数字格式化DecimalFormat 总结

import java.text.DecimalFormat;public class test { /** * @param args */ public static void main(String[] args) { double d = 1231423.3823; System.out.println("格式化前:"+d); De

swpisw的专栏 9974

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

DecimalFormat数字格式化用法

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。 DecimalFormat 包含一个模式 和一组符号  符号含义:  0 一个数字  # 一个数字,不包括 0  . 小数的分隔符的占位符  , 分组分隔符的占位符  ; 分隔格式。  - 缺省负数前缀。  % 乘以 100 和作为百分比显示  ? 乘以 1000 和作为千进制

Senssic 5351

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

DecimalFormat格式化显示数字

System.out.println(new DecimalFormat("光速大小为每秒,###米").format(c));System.out.println("人民币"+new DecimalFormat("¥,###.##").format(c));//取两位整数和三位小数,整数不足部分以0填补。//显示为两位整数的科学计数法,并取四位小数。//以百分比方式计数,并取两位小数。//显示为科学计数法,并取五位小数。//取6位整数,不足部分以0填充。//取一位整数和两位小数。

zbguolei的专栏 761

数字格式化-DecimalFormat的使用

前言 原来没有接触过DecimalFormat,没有想到还有这玩意。使用的时候还是不错的,详细的了解可以看官方的api。找到了中文的api,小伙子们可以直接跳转啊! DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。 DecimalFormat 包含一个模式 和一组符号。差点忘记说它是干嘛的。 符号含义: 上一个经典的表格,我们来说一说响应的符号...

#Crazy的博客 6843

JAVA基础—格式化数字DecimalFormat

在输出数字时,有时需要给数字配上单位,有时需要数字具有一定的精度,也有时需要用科学计数法表示数字。 关键技术剖析: java.text.DecimalFormat类专门用于格式化数字。 需要为DecimalFormat提供格式化模式Pattern。通过构造方法或者DecimalFormat的applyPattern方法设置模式。Pattern的类型为字符串。 调用DecimalFormat的form

此博客已停用,博文会逐渐转移到新地址,http://blog.youkuaiyun.com/liupeifeng3514 699

DecimalFormat格式化数字

一般情况下可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalForma

480

DecimalFormat(Java中的应用——十进制数字格式化)

DecimalFormat(Java中的应用——十进制数字格式化) DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化【十进制数字】。

红目香薰 1376
上一篇: SimpleDateFormat 格式化日期时的非法检验
下一篇: 用oracle的smtp包发信
yangtom
博客等级 码龄25年 3粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值