关于double,float,等那些个小数类型的数字如何保留2位小数,如何取整,按要求保留小数,如何四舍五入,如何向上取整,如何向下取整。各种姿势的格式化小数。我这做个总结。

搜索的结果都差不多吧,但是都没有测试结果可以看,然后我就来总结一下,顺便留下测试的过程代码和结果。
算是留个记录吧,以备后用。
不要说先乘以10000再除以10000啥的,都不科学。
话不多说,看法宝!!!

package com.lxk.formatTest;import java.math.RoundingMode;
import java.text.DecimalFormat;/*** 数字格式化测试* <p>** @author lxk on 2017/1/22*/
public class NumberFormatTest {public static void main(String[] args) {Float result;//result = 9.313226E-10,也就是0.0000000009313226//result = ((float) 1L) / (1024L * 1024L * 1024L);result = 1230.555F;//result = 1230.466F;System.out.println("-------------我是分界线-------------");showFormat(result);//result = 10.5F;result = 10.4F;System.out.println("-------------我是分界线-------------");showFormatMore(result);}/*** 测试各种舍入模式的不同** @param result 待格式化的参数*/private static void showFormatMore(Float result) {System.out.println("初始值:" + result.toString());DecimalFormat decimalFormat = new DecimalFormat("0");decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN);System.out.println("HALF_EVEN:" + decimalFormat.format(result));decimalFormat.setRoundingMode(RoundingMode.HALF_UP);System.out.println("HALF_UP:" + decimalFormat.format(result));decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);System.out.println("HALF_DOWN:" + decimalFormat.format(result));decimalFormat.setRoundingMode(RoundingMode.FLOOR);System.out.println("FLOOR:" + decimalFormat.format(result));decimalFormat.setRoundingMode(RoundingMode.CEILING);System.out.println("CEILING:" + decimalFormat.format(result));decimalFormat.setRoundingMode(RoundingMode.UP);System.out.println("UP:" + decimalFormat.format(result));decimalFormat.setRoundingMode(RoundingMode.DOWN);System.out.println("DOWN:" + decimalFormat.format(result));}/*** 打印数据遭格式化之后的效果(默认是HALF_EVEN,他不是四舍五入,)** @param value 待格式化的参数*/private static void showFormat(Float value) {System.out.println("初始值:" + value.toString());//取一位整数System.out.println(new DecimalFormat("0").format(value));//取一位整数和两位小数System.out.println(new DecimalFormat("0.00").format(value));//取两位整数和三位小数,整数不足部分以0填补System.out.println(new DecimalFormat("00.000").format(value));//取所有整数部分System.out.println(new DecimalFormat("#").format(value));//以百分比方式计数,并取两位小数System.out.println(new DecimalFormat("#.##%").format(value));//显示为科学计数法,并取五位小数System.out.println(new DecimalFormat("#.#####E0").format(value));//显示为两位整数的科学计数法,并取四位小数System.out.println(new DecimalFormat("00.####E0").format(value));//每三位以逗号进行分隔。System.out.println(new DecimalFormat(",###").format(value));//将格式嵌入文本System.out.println(new DecimalFormat("所传入的格式化参数是:###大小。").format(value));}
}

然后就是上面代码的运行结果,如下:

注意,运行结果的1,和2的差别,1230.5和1230.55,两个在取整数的时候,一个是1230,一个是1231.说明这个默认的舍入模式,不是我们一般常见的四舍五入。具体看下面的说明吧。

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

下面是摘自jdk文档里面内容,虽然是1.6版本的,但是有这个类的中文介绍哟。
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。
它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。

舍入
DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN。
同步
DecimalFormat 通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步。

关于 RoundingMode.HALF_EVEN的解释:
RoundingMode这个是个枚举类型,java.math包下。
有那么几个枚举常量,分别代表不同的舍入方式。下面简单介绍介个。

HALF_EVEN
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为
同 RoundingMode.HALF_UP;如果为偶数,则舍入行为同 RoundingMode.HALF_DOWN。注意,在重复进行一系列计算时,此舍入模式可以在统计上将累加错误减到最小。
此舍入模式也称为“银行家舍入法”,主要在美国使用。此舍入模式类似于 Java 中对 float 和 double 算法使用的舍入策略。
HALF_UP
此舍入模式就是通常学校里讲的四舍五入。
HALF_DOWN
应该按上面的理解话,是五舍六入。
FLOOR
向负无限大方向舍入的舍入模式,此舍入模式始终不会增加计算值。白话文就是向下取整。
CEILING
向正无限大方向舍入的舍入模式。此舍入模式始终不会减少计算值。向上取整
UP
这个也是向上取整,但是,如果是坐标轴的话,这个都是远离零的方向取整,5.5->6; -2.5->-3
DOWN
这个也是向下取整,但是,如果是坐标轴的话,这个都是靠近零的方向取整,5.5->5; -2.5->-2

上面这些,记也记不住,用的时候,查一下再说吧。

看看这个例子,再理解一下上面的舍入的解释

Java DecimalFormat 格式化数字,取2位小数,按位取小数,按要求格式化小数 float,double,int,等类型都支持相关推荐

  1. android float类型保留两位小数_你知道MySQL中Decimal类型和Float Double的区别吗?

    出处:cnblogs.com/panchanggui/p/10766607.html MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,flo ...

  2. [剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]

    [问题描述][中等] 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字.示例 1:输入:nums = [3,4,3,3] 输出:4 示例 2:输入:n ...

  3. JS日期格式化——数字日期转中文日期(封装函数,dayjs时间格式化YYYY-MM-DD)

    JS数字日期转中文日期 往期相关文章 场景复现 封装函数(数字日期转中文日期) 实际应用 往期相关文章 文章内容 文章链接 JS数组对象--根据日期进行排序,按照时间进行升序或降序排序 https:/ ...

  4. java 格式化 浮点数_DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等...

    DecimalFormat的用法  Java 浮点数 Float Double 小数 格式化 保留小数位后几位等 DecimalFormat df = new DecimalFormat(); dou ...

  5. html显示千分位及小数位,JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去…...

    JavaScript 格式化数字.金额.千分位.保留几位小数.舍入舍去- 类库推荐 1. Numeral.js 一个用于格式化和操作数字的JavaScript库.数字可以被格式化为货币,百分比,时间, ...

  6. 在JavaScript中使用正好两位小数格式化数字

    我有这行代码将我的数字四舍五入到小数点后两位. 但是我得到这样的数字:10.8.2.4等.这些不是我对小数点后两位的想法,因此我如何改善以下内容? Math.round(price*Math.pow( ...

  7. js金额千分位显示_JavaScript 格式化数字、金额、千分位、保留几位小数

    JS对货币格式化函数 方法一:保留2位小数 /** * 将数值四舍五入(保留2位小数)后格式化成金额形式 * * @param num 数值(Number或者String) * @return 金额格 ...

  8. JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去… 及其浮点数计算精度问题(推荐的类库 Numeral.js 和 accounting.js)...

    前端开发中经常会碰到用 JavaScript 格式化数字,最最常见的是格式化金额,一般格式化金额需要千分位分隔,保留2位小数等等. 还有偶然会遇到的使用 js 计算浮点数时出现误差. 完善的功能函数推 ...

  9. java格式化数字DecimalFormat

    常用的几种需求格式 // 圆周率,请允许我用 π 这个命名,手动滑稽 double π = 3.1415926535898; 保留两位小数(多保留几位就多加几个零) new DecimalFormat ...

最新文章

  1. 一次代码审计实战案例【思路流程】
  2. bzoj 2844: albus就是要第一个出场 高斯消元
  3. nodejs - local installation and global installation
  4. 1.1.1 从简单的数据类型开始
  5. 6月第1周安全回顾 Flash Player漏洞危机 邮件泄漏敏感信息
  6. mysql连接查询on_MySql 连接查询中 on 和 where 的区别
  7. java基于ssm的个人博客系统_一个基于 Spring Boot 的开源免费博客系统
  8. 达梦数据charindex_更新日志 · dotnetcore/FreeSql Wiki · GitHub
  9. 财务有必要学python吗-财务人要学Python吗?
  10. 钉钉web版防撤回、屏蔽已读
  11. redis 的 key 设计原则
  12. 全球DEM下载 90米、30米、12.5米等各种精度DEM数据
  13. CMOS 集成电路设计手册 (基础篇)--学习笔记 第二章
  14. word文件做一半未响应_word编辑一半未响应怎么办
  15. C++面向对象之类complex详解
  16. MapReduce实现矩阵乘法的一些总结
  17. LaTeX 使用 \begin{aligned} 出现错误代码 Environment aligned undefined. \begin{aligned}
  18. python网易云爬虫_使用python进行爬虫下载网易云音乐
  19. 手机客户端使用ConnectBot软件远程登录服务器
  20. 多元函数微分学——全微分和微分中高阶无穷小的联系

热门文章

  1. 2021.01.05丨根据基因名称拼接表达量与相关注释
  2. 解决一个八阿哥bug的方法
  3. NOIP模拟17.10.12
  4. 自制基于Arduino的玩具小汽车
  5. RFID相关的两个标准协议接口 PC/SC 和 CCID
  6. ABAP表-PP模块
  7. 人商城PHP7.0,wemall商城系统v7.0|php微信商城系统wemall v7.0下载
  8. 使用 easypoi 导出 excel 实现动态列,完美解决!
  9. DxO PhotoLab 2.2.2完整精华汉化版|顶级RAW数码后期软件
  10. NYT assail military militant