【详解Java中格式化处理】

    在Java中我们需要对一个数字进行四舍五入处理或者是对一个字符串进行格式化处理,我们需要使用String.Format方法或者其他格式化方法


    一、Format方法
    比如:DecimalFormat df = new DecimalFormat("#.00");SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");等
    使用方法基本如下:
    [java]
    Date date=new Date(fileTemp.lastModified());
    currentUpdateTime=sdf.format(date);


    二、String.format方法


    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式
    我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解,就是最终该整数转化的字符串最少包含多少位数字。我们来看看剩下2个部分的含义吧:
    标识:
    '-' 在最小宽度内左对齐,不可以与"用0填充"同时使用
    '#' 只适用于8进制和16进制,8进制时在结果前面增加一个0,16进制时在结果前面增加0x
    '+' 结果总是包括一个符号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
    ' ' 正值前加空格,负值前加负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
    '0' 结果将用零来填充
    ',' 只适用于10进制,每3位数字之间用","分隔
    '(' 若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(同'+'具有同样的限制)
    转换方式:
    d-十进制 o-八进制 x或X-十六进制
    上面的说明过于枯燥,我们来看几个具体的例子。需要特别注意的一点是:大部分标识字符可以同时使用。
    System.out.println(String.format("%1$,09d", -3123));
    System.out.println(String.format("%1$9d", -31));
    System.out.println(String.format("%1$-9d", -31));
    System.out.println(String.format("%1$(9d", -31));
    System.out.println(String.format("%1$#9x", 5689));
    //结果为:
    //-0003,123
    // -31
    //-31
    // (31)
    // 0x1639


    2.对浮点数进行格式化:%[index$][标识][最少宽度][.精度]转换方式
    我们可以看到,浮点数的转换多了一个"精度"选项,可以控制小数点后面的位数。
    标识:
    '-' 在最小宽度内左对齐,不可以与"用0填充"同时使用
    '+' 结果总是包括一个符号
    ' ' 正值前加空格,负值前加负号
    '0' 结果将用零来填充
    ',' 每3位数字之间用","分隔(只适用于fgG的转换)
    '(' 若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(只适用于eEfgG的转换)
    转换方式:
    'e', 'E' -- 结果被格式化为用计算机科学记数法表示的十进制数
    'f' -- 结果被格式化为十进制普通表示方式
    'g', 'G' -- 根据具体情况,自动选择用普通表示方式还是科学计数法方式
    'a', 'A' -- 结果被格式化为带有效位数和指数的十六进制浮点数


    3.对字符进行格式化:
    对字符进行格式化是非常简单的,c表示字符,标识中'-'表示左对齐,其他就没什么了。


    4.对百分比符号进行格式化:
    看了上面的说明,大家会发现百分比符号"%"是特殊格式的一个前缀。那么我们要输入一个百分比符号该怎么办呢?肯定是需要转义字符的,但是要注意的是,在这里转义字符不是"\",而是"%".换句话说,下面这条语句可以输出一个"12%":
    System.out.println(String.format("%1$d%%", 12));


    5.取得平台独立的行分隔符:
    System.getProperty("line.separator")可以取得平台独立的行分隔符,但是用在format中间未免显得过于烦琐了。于是format函数自带了一个平台独立的行分隔符那就是String.format("%n")。


    6.对日期类型进行格式化:
    以下日期和时间转换的后缀字符是为 't' 和 'T' 转换定义的。这些类型相似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的类型。提供其他转换类型是为了访问特定于 Java 的功能(如将 'L' 用作秒中的毫秒)。
    以下转换字符用来格式化时间:
    'H' 24 小时制的小时,被格式化为必要时带前导零的两位数,即 00 - 23.
    'I' 12 小时制的小时,被格式化为必要时带前导零的两位数,即 01 - 12.
    'k' 24 小时制的小时,即 0 - 23.
    'l' 12 小时制的小时,即 1 - 12.
    'M' 小时中的分钟,被格式化为必要时带前导零的两位数,即 00 - 59.
    'S' 分钟中的秒,被格式化为必要时带前导零的两位数,即 00 - 60 ("60" 是支持闰秒所需的一个特殊值)。
    'L' 秒中的毫秒,被格式化为必要时带前导零的三位数,即 000 - 999.
    'N' 秒中的毫微秒,被格式化为必要时带前导零的九位数,即 000000000 - 999999999.
    'p' 特定于语言环境的 上午或下午 标记以小写形式表示,例如 "am" 或 "pm".使用转换前缀 'T' 可以强行将此输出转换为大写形式。
    'z' 相对于 GMT 的 RFC 822 格式的数字时区偏移量,例如 -0800.
    'Z' 表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境(如果有)。
    's' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数,即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。
    'Q' 自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数,即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。
    以下转换字符用来格式化日期:
    'B' 特定于语言环境的月份全称,例如 "January" 和 "February".
    'b' 特定于语言环境的月份简称,例如 "Jan" 和 "Feb".
    'h' 与 'b' 相同。
    'A' 特定于语言环境的星期几全称,例如 "Sunday" 和 "Monday"
    'a' 特定于语言环境的星期几简称,例如 "Sun" 和 "Mon"
    'C' 除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数,即 00 - 99
    'Y' 年份,被格式化为必要时带前导零的四位数(至少),例如,0092 等于格里高利历的 92 CE.
    'y' 年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99.
    'j' 一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366.
    'm' 月份,被格式化为必要时带前导零的两位数,即 01 - 13.
    'd' 一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31
    'e' 一个月中的天数,被格式化为两位数,即 1 - 31.
    以下转换字符用于格式化常见的日期/时间组合。
    'R' 24 小时制的时间,被格式化为 "%tH:%tM"
    'T' 24 小时制的时间,被格式化为 "%tH:%tM:%tS".
    'r' 12 小时制的时间,被格式化为 "%tI:%tM:%tS %Tp".上午或下午标记 ('%Tp') 的位置可能与语言环境有关。
    'D' 日期,被格式化为 "%tm/%td/%ty".
    'F' ISO 8601 格式的完整日期,被格式化为 "%tY-%tm-%td".
    'c' 日期和时间,被格式化为 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969".

 


    三、Math.Round方法
    Math类中有这样两个方法:
    1 public static long round(double a)
    2 public static int round(float a)
    方法1返回最接近参数的long,其结果相当于下面这个表达式的值:
    (long)Math.floor(a + 0.5d)
    方法2返回最接近参数的int,其结果相当于下面这个表达式的值:
    (int)Math.floor(a + 0.5f)
    这其实就是四舍五入了,只不过它们只保留整数位。
    示例:
    long aL = Math.round(0.4d);
    long bL = Math.round(0.5d);
    int cI = Math.round(0.4f);
    int dI = Math.round(0.5f);
    System.out.println("aL = " + aL);
    System.out.println("bL = " + bL);
    System.out.println("cI = " + cI);
    System.out.println("dI = " + dI);
    输出结果:
    aL = 0
    bL = 1
    cI = 0
    dI = 1


    四、NumberFormat 方法
    NumberFormat 是所有数值格式的抽象基类。 该类提供了格式化和分析数值的接口。 NumberFormat 也提供了确定
    哪个语言环境具有数值格式以及它们名字的方法。
    [java]
    package com.discursive.jccook.collections;
    import java.text.NumberFormat;
    public class Test {
    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Double myNumber=23323.3323232323;
    Double test=0.3434;
    //getInstance()
    //返回当前缺省语言环境的缺省数值格式。
    String myString = NumberFormat.getInstance()。format(myNumber);
    System.out.println(myString);
    //getCurrencyInstance()返回当前缺省语言环境的通用格式
    myString = NumberFormat.getCurrencyInstance()。format(myNumber);
    System.out.println(myString);
    //getNumberInstance() 返回当前缺省语言环境的通用数值格式。
    myString = NumberFormat.getNumberInstance()。format(myNumber);
    System.out.println(myString);
    //getPercentInstance() 返回当前缺省语言环境的百分比格式。
    myString = NumberFormat.getPercentInstance()。format(test);
    System.out.println(myString);
    //setMaximumFractionDigits(int) 设置数值的小数部分允许的最大位数。
    //setMaximumIntegerDigits(int) 设置数值的整数部分允许的最大位数。
    //setMinimumFractionDigits(int) 设置数值的小数部分允许的最小位数。
    //setMinimumIntegerDigits(int) 设置数值的整数部分允许的最小位数。
    NumberFormat format = NumberFormat.getInstance();
    format.setMinimumFractionDigits( 3 );
    format.setMaximumFractionDigits(5);
    format.setMaximumIntegerDigits( 10 );
    format.setMinimumIntegerDigits(0);
    System.out.println(format.format(2132323213.23266666666));
    }
    }
    结果为:
    23,323.332
    $23,323.33
    23,323.332
    34%
    2,132,323,213.23267

转载于:https://www.cnblogs.com/kongyandujiaoxi/p/3343962.html

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

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

相关文章

HDU4506 小明系列故事——师兄帮帮忙

问题链接:HDU4506 小明系列故事——师兄帮帮忙。 问题描述:参见上述链接。 问题分析:(略)。 程序说明:函数powermod()是快速模幂函数。 AC的C语言程序如下: /* HDU4506 小明系列故事——师兄帮帮…

1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)

前言 在上一篇0_MVCEFAutofac(dbfirst)轻型项目框架_基本框架中,我已经介绍了这个轻型框架的层次结构,在下面的这篇文章中,我将以教师登陆功能为例,具体来扩充下我的core层的代码。 在这之前,我想先补充讨论下是否有必…

文字转语音+html5,JS实现文字转语音并播放

html:div>audio>div>js:function doTTS() {var ttsDiv document.getElementById(bdtts_div_id);var ttsAudio document.getElementById(tts_autio_id);var ttsText document.getElementById(ttsText).value;// 文字转语音ttsDiv.removeChild…

字符串的全排列和组合算法

全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助…

设计模式基于C#的工程化实现及扩展

设计模式基于C#的工程化实现及扩展 转载于:https://www.cnblogs.com/gzmg/p/3344833.html

Python实现atm机的功能

主要还是参考网上内容,自己做了修改。虽然代码有小bug,但是不影响学习和测试。功能:1.额度:80002.可以提现,手续费5%3.每月最后一天出账单,写入文件4.记录每月日常消费流水5.提供还款接口1.atm的脚本[rootp…

Direct ByteBuffer学习

ByteBuffer有两种一种是heap ByteBuffer,该类对象分配在JVM的堆内存里面,直接由Java虚拟机负责垃圾回收,一种是direct ByteBuffer是通过jni在虚拟机外内存中分配的。通过jmap无法查看该快内存的使用情况。只能通过top来看它的内存使用情况。 JVM堆内存大…

魔兽争霸Ⅲ运行时不能初始化directX的错误解决

运行魔兽争霸3不能初始化DirectX错误这样解决: 1:在运行中输入(winr):dxdiag,查看显示栏,确定电脑已安装好directx 8.1以上,且下面的三个加速都已开启。 2:如果没有安装directx就下载安装一个&a…

Android7.0占用空间,Android7.0 开发者注意事项

1、当设备处于充电状态且屏幕已关闭一定时间后,设备会进入低电耗模式并应用第一部分限制:关闭应用网络访问、推迟作业和同步。如果进入低电耗模式后设备处于静止状态达到一定时间,系统则会对 PowerManager.WakeLock、AlarmManager 闹铃、GPS …

Android探索之旅 | 面向对象和Java基础

-- 作者 谢恩铭 转载请注明出处 上一篇 Android探索之旅 | Android简介 中说到: "Android的默认开发语言是Java,入门简单。而且,你的Java水平不需要多好就可以上手开发Android App了。" 不少朋友说看到后很是心安。 不过小编也不想…

DataGirdView 编辑项时的验证

dgvConfig.DataSource CreateTable();dgvConfig.Columns["编号"].ReadOnly true; //只读dgvConfig.AllowUserToAddRows false; //不允许添加新行dgvConfig.EditingControlShowing new DataGridViewEditingControlShowingEventHandler(dgvConfig_EditingControlS…

使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)

前言 本章将实现非常实用的功能——下载在线视频。涉及到多线程、线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术细节实现&#xff01…

生成0到1之间随机数的C代码

#include <stdlib.h>#include <stdio.h>#include <time.h>int main(){srand((unsigned)time(NULL));int i;double r;for(i0;i<50;i){r(float)rand()/RAND_MAX; printf("%f\n",r);}return 0;}

HTML声明文档类型后样式出错,doctype如何声明

如何doctype声明&#xff0c;新增的结构元素和功能元素HTML5已形成了最终的标准&#xff0c;概括来讲&#xff0c;它主要是关于图像&#xff0c;位置&#xff0c;存储&#xff0c;多任务等功能的增加。 新增的元素有绘画 canvas &#xff0c;用于媒介回放的 video 和 audio 元素…

Error-Project facet Java version 1.8 is not supported

最近导入最新的Strtus2.5.10.1 Demo时出现了这个错误 解决方案如下&#xff1a; 选中工程——右键——Properties 然后依次展开找到如图所示内容&#xff0c;将1.8改成1.7即可。 原因&#xff1a;工程默认配置是1.8&#xff0c;而本地环境JDK版本为1.7&#xff0c;两则不匹配造…

6.2

转载于:https://www.cnblogs.com/tutuaixiaomei/p/3354356.html

Tomcat全攻略

内容&#xff1a; 一&#xff1a;简单介绍二&#xff1a;安装及配置三&#xff1a;应用四&#xff1a;综述參考资料关于作者宗 锋西北大学计算机系硕士2001 年 12 月 随着java的流行&#xff0c;其在web上的应用也越来越广&#xff0c;tomcat作为一个开源的servlet容器&#xf…

《G档案》中关于游戏程序设计的文章

刚拿到前导的《G档案》&#xff0c;发现了主程刘刚的文章&#xff0c;是目前我所见 到的关于游戏编程的最好的一篇&#xff0c;与大家共享。转载&#xff1a;http://www.360doc.cn/article/2778_53476.html PC游戏编程 目录 1 游戏程序理论 1.1 技术基础 1.2 游戏底层 1.3 编…

shell笔记

system 磁盘 磁盘空间使用情况df查看文件或目录大小du挂载usb sudo fdisk -l # Find what the drive is called e.g. /dev/sdb1 sudo mkdir /media/usb sudo mount /dev/sdb1 /media/usb sudo umount /media/usb# umount sudo umount /media/usb utils awk 打印文件的第一列(域…

html5编辑文档,HTML5带各种趣味动画的文本编辑器

CSS语言&#xff1a;CSSSCSS确定body {background-color: #eee;}html,body {margin: 0px;height: 100%;overflow: hidden;}.toolbar {width: 100%;background: #fff;padding: 4px 10px;}.characters {display: inline-block;margin-right: 20px;vertical-align: top;}.characte…