Java基础知识强化107:DecimalFormat
1. 引入:
如何控制输出数据的精度?
>1. 使用Math.round方法
(1)Java如何把一个float(double)四舍五入到小数点后2位,4位,或者其它指定位数 ?
答:比如,如下案例:
float a = 123.2354f;
float b = (float)(Math.round(a*100))/100 // 输出123.24
如果想要3位就是把2个100都换成1000
(2)根据上面的规律,我们可以定义一个方法,专门用来四舍五入浮点数特定位数:
package com.himi.test1; public class CubeRootDemo { public static void main(String[] args) { //
// Scanner sc = new Scanner(System.in);
//
// float number = sc.nextFloat();
//
// float result = (float)(Math.round((float)Math.cbrt(number)*10))/10;
//
// System.out.println(result); System.out.println(roundByDigit(123.2354, 2));
} /**
*
* @param number
* 需要四舍五入的数据
* @param digit
* 精确到小数点后面的位数
*/
private static double roundByDigit(double number, int digit) {
// double temp = Math.pow(10, digit);
//
// double result = (double)Math.round(number*temp)/temp; return (double) Math.round(number * Math.pow(10, digit)) / Math.pow(10, digit); } }
运行调试:
>2. 使用String.format(String pattern)方法
package com.himi.test5; public class Main5 {
public static void main(String[] args) { double d = 3.1415926;
System.out.println(String.format("%.2f", d)); } }
输出为:
备注:
%.2f %. 表示小数点前任意位数 2 表示两位小数 f 表示格式后的结果为浮点型
2. 其实Java提供了数据格式化的类---DecimalFormat,下面就说一下DecimalFormat的使用:
(1)首先介绍一下各种符号的含义:
0 一个数字
# 一个数字,不包括 0
. 小数的分隔符的占位符
, 分组分隔符的占位符
; 分隔格式。
- 缺省负数前缀。
% 乘以100 和作为百分比显示
? 乘以1000 和作为千进制货币符显示;用货币符号代替;如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符。
X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
(2)特别的,对 '0' 和 '#' 的区别重点讲一下,如下:
0:
比实际数字的位数多,不足的地方用0补上。
new DecimalFormat("00.00").format(3.14) //结果:03.14
new DecimalFormat("0.000").format(3.14) //结果: 3.140
new DecimalFormat("00.000").format(3.14) //结果:03.140
比实际数字的位数少:整数部分不改动,小数部分,四舍五入
new DecimalFormat("0.000").format(13.146) //结果:13.146
new DecimalFormat("00.00").format(13.146) //结果:13.15
new DecimalFormat("0.00").format(13.146) //结果:13.15
#:
比实际数字的位数多,不变。
new DecimalFormat("##.##").format(3.14) //结果:3.14
new DecimalFormat("#.###").format(3.14) //结果: 3.14
new DecimalFormat("##.###").format(3.14) //结果:3.14
比实际数字的位数少:整数部分不改动,小数部分,四舍五入
new DecimalFormat("#.###").format(13.146) //结果:13.146
new DecimalFormat("##.##").format(13.146) //结果:13.15
new DecimalFormat("#.##").format(13.146) //结果:13.15
(3)使用DecimalFormat的示例代码,如下:
package com.himi.test5; import java.text.DecimalFormat; public class Main4 {
public static void main(String[] args) { DecimalFormat df1 = new DecimalFormat("0.0");
System.out.println(df1.format(12.34)); DecimalFormat df2 = new DecimalFormat("#.#");
System.out.println(df2.format(12.34)); DecimalFormat df3 = new DecimalFormat("000.000");
System.out.println(df3.format(12.34)); DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println(df4.format(12.34)); System.out.println("------------分组输出------------------");
DecimalFormat df5 = new DecimalFormat("###,###.0000");
System.out.println(df5.format(111111123456.12)); DecimalFormat df6 = new DecimalFormat("##,###.000");
System.out.println(df6.format(111111123456.12)); DecimalFormat df7 = new DecimalFormat("##,###.000");
System.out.println(df6.format(11112345.1237)); System.out.println("---------------科学计数法---------------"); DecimalFormat df8 = new DecimalFormat("0.000E0000");
System.out.println(df8.format(10000));
System.out.println(df8.format(12345678.345)); System.out.println("---------------百分数的输出---------------");
DecimalFormat df9 = new DecimalFormat("0000.0000%");
System.out.println(df9.format(0.34567));
System.out.println(df9.format(1.34567)); DecimalFormat df10= new DecimalFormat("#.####%");
System.out.println(df10.format(0.78645));
System.out.println(df10.format(1.34567)); System.out.println("-----------添加前、后修饰字符串,记得要用单引号括起来-----------");
DecimalFormat df11= new DecimalFormat(" '这是我的钱有',###.###'$' ");
System.out.println(df11.format(33333443.3333)); System.out.println("-----------添加货币表示符号-----------");
DecimalFormat df12= new DecimalFormat();
df12.applyPattern("###,###.##¥");
System.out.println(df12.format(34)); System.out.println("-----------定义正负数模板,记得要用分号隔开-----------");
DecimalFormat df13= new DecimalFormat("00.000;-#.0");
System.out.println(df13.format(345.567));
System.out.println(df13.format(-345.567)); } }
运行结果,如下:
Java基础知识强化107:DecimalFormat的更多相关文章
- Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...
- Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)
1. 基础知识: Android(java)学习笔记61:多线程程序的引入 ~ Android(java)学习笔记76:多线程-定时器概述和使用
- Java基础知识强化之集合框架笔记65:Map集合之集合多层嵌套的数据分析
1. 为了更符合要求: 这次的数据就看成是学生对象. 传智播客 bj 北京校区 jc 基础班 林青霞 27 风清扬 30 jy 就业班 赵雅芝 28 武鑫 29 sh 上海 ...
- Java基础知识强化之集合框架笔记62:Map集合之HashMap嵌套HashMap
1. HashMap嵌套HashMap 传智播客 jc 基础班 陈玉楼 20 高跃 ...
- Java基础知识强化14:Java死亡竞赛题目解析
一个小型网站上发布了一个称为Java“死亡竞赛”的新项目.测验发布后,超过20000位开发者参加了测验.网站以20道关于Java的多选题为主.我们得到了众多开发者的测验统计数据,今天,我们非常乐意 ...
- Java基础知识强化之集合框架笔记04:Collection集合的基本功能测试
1. Collection集合的基本功能测试: package cn.itcast_01; import java.util.ArrayList; import java.util.Collectio ...
- Java基础知识强化之集合框架笔记01:集合的由来与数组的区别
1. 集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该 ...
- Java基础知识强化106:Java中 int 的各进制之间的转换
1.二.八.十.十六进制之间的转换 下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下: public static Integer valueOf(String s, int radix ...
- Java基础知识强化105:打印数组的方法总结
1. 使用for循环打印数组. 2. 使用Arrays工具类,将数组转化为有序的List打印出来. 3. 使用Arrays工具类,使用Arrays.toString()输出数组内容. 上面三种方法打印 ...
随机推荐
- sql多行合并成一行用逗号隔开,多表联合查询中子查询取名可重复
简单版的 SELECT a.CreateBy,Name =stuff((select ','+Name FROM SG_Client WHERE CreateBy = a.CreateBy for x ...
- mybatis之@Select、@Insert、@Delete、@Param
之前学习的时候,看到别人在使用mybatis时,用到@Select.@Insert.@Delete.@Param这几个注解,故楼主研究了一下,在这里与大家分享 当使用这几个注解的时候,可以省去写Map ...
- mac系统终端sudo免输入密码技能get
1.需要在/etc/sudoers中配置. 这个文件的权限是r/r/n,配置之前需要加写权限. sudo chmod u-w /etc/sudoers 2.打开命令窗口sudo visudo 或者 s ...
- Idea生成Javadoc
Idea tools菜单下:Generate Javadoc...,在弹出的对话框中选择指定的包或文件,也可滤掉指定的包或文件.如果有自定义的javadoc标签,则需要在other command l ...
- Java的工厂模式(一)
Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...
- Java虚拟机 - 符号引用和直接引用理解
java -- JVM的符号引用和直接引用 https://www.zhihu.com/question/50258991 在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号 ...
- 如何灵活利用免费开源图标字体-IcoMoon篇——张鑫旭
一.温故知新 之前有专门介绍过如何使用类似fontforge软件制作自定义字符字体以及如何在web中实际应用. 不过,文中提到的是利用系统自带的一些特殊字体,如WINGDNG3.ttf字体. 显然,系 ...
- centos文件基本操作
centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir ...
- iframe跨源报错:"Blocked a frame with origin from accessing a cross-origin frame"
一.报错信息: “Blocked a frame with origin from accessing a cross-origin frame” 二.在stackoverflow上找到原因 Same ...
- ios 九宫格
#define kViewW 40 //宽度 #define kViewH 61 //高度 #define kColCount 4 //共几列 CGFloat marginX = (self.view ...