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的更多相关文章

  1. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  2. Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)

    1. 基础知识: Android(java)学习笔记61:多线程程序的引入    ~    Android(java)学习笔记76:多线程-定时器概述和使用 

  3. Java基础知识强化之集合框架笔记65:Map集合之集合多层嵌套的数据分析

    1. 为了更符合要求: 这次的数据就看成是学生对象. 传智播客 bj 北京校区 jc  基础班 林青霞 27     风清扬 30      jy  就业班   赵雅芝 28  武鑫 29 sh 上海 ...

  4. Java基础知识强化之集合框架笔记62:Map集合之HashMap嵌套HashMap

    1. HashMap嵌套HashMap  传智播客          jc    基础班                      陈玉楼  20                      高跃   ...

  5. Java基础知识强化14:Java死亡竞赛题目解析

      一个小型网站上发布了一个称为Java“死亡竞赛”的新项目.测验发布后,超过20000位开发者参加了测验.网站以20道关于Java的多选题为主.我们得到了众多开发者的测验统计数据,今天,我们非常乐意 ...

  6. Java基础知识强化之集合框架笔记04:Collection集合的基本功能测试

    1. Collection集合的基本功能测试: package cn.itcast_01; import java.util.ArrayList; import java.util.Collectio ...

  7. Java基础知识强化之集合框架笔记01:集合的由来与数组的区别

    1. 集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该 ...

  8. Java基础知识强化106:Java中 int 的各进制之间的转换

    1.二.八.十.十六进制之间的转换  下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下: public static Integer valueOf(String s, int radix ...

  9. Java基础知识强化105:打印数组的方法总结

    1. 使用for循环打印数组. 2. 使用Arrays工具类,将数组转化为有序的List打印出来. 3. 使用Arrays工具类,使用Arrays.toString()输出数组内容. 上面三种方法打印 ...

随机推荐

  1. Iframe内联框架

    iframe:内联框架标签,用于在网页中任意的位置嵌入另一个网页 <iframe src="url地址"> </iframe> iframe标签的常用属性 ...

  2. FacebookFriendAdderPro

    Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Fe ...

  3. 利用CEF山寨一个翻译器

    起因 在某些情况下,有将从某种类型的语言翻译成另一种类型语言的需求.比如在生成实体时,可能需要将中文名称转换成英文.于是利用CEFSharp山寨了一个翻译器.效果图如下: CEF简介 CEF全称为Ch ...

  4. 十九、curator recipes之PathChildrenCache

    简介 curator可以监听路径下子节点的变更操作,如创建节点,删除节点 官方文档:http://curator.apache.org/curator-recipes/path-cache.html ...

  5. ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别

    在ASP.NET MVC中,视图数据可以通过ViewBag.ViewData.TempData来访问,其中ViewBag 是动态类型(Dynamic),ViewData 是一个字典型的(Diction ...

  6. HTML5 number类型文本框step属性的验证机制——张鑫旭

    我在下一盘很大的棋,本文只是其中的一个棋子. 需要提前知道的: 目前而言,对step雄起的浏览器为IE10+, Chrome以及Opera浏览器. 需要预先知道number类型input的一些基本知识 ...

  7. HTML5扩展之微数据与丰富网页摘要——张鑫旭

    一.微数据是? 一个页面的内容,例如人物.事件或评论不仅要给用户看,还要让机器可识别.而目前机器智能程度有限,要让其知会特定内容含义,我们需要使用规定的标签.属性名以及特定用法等.举个简单例子,我们使 ...

  8. JS 时间转化为几分钟前 几小时前 几天前

    背景:最近公司要做动态列表,类似于微信朋友圈.动态创建时间就需要显示为 刚刚.几分钟前.几小时前.几天前.2018-05-15,这样的形式. 代码如下 var minute = 1000 * 60; ...

  9. 润乾报表html代码填报

     由于html和富文本类型的单元格,不能进行可写操作,如果要想填报时填入html代码并且提交后更新就要换了一个方法,通过数据回填的方法. 比如在C3单元格设置html事件(也可以通过一个按钮来触发 ...

  10. Activity被回收导致fragment的getActivity为空

    在编写含有Fragment代码的时候,经常会遇到这种情况,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠的现象. 如果系统内存不足.或者切换横竖屏.或者app长时间 ...