没有合适的资源?快使用搜索试试~ 我知道了~
首页Java保留两位小数方法大全
Java保留两位小数方法大全
需积分: 50 21 下载量 38 浏览量
更新于2023-06-20
评论 3
收藏 48KB DOC 举报
Java保留两位小数的各种方法(代码),还有浮点数、整数之间的转换几注意事项,比较适用。
资源详情
资源评论
资源推荐
Java 保留两位小数专题
方式一:
double f = 111231.5585;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
保留两位小数
---------------------------------------------------------------
方式二:
java.text.DecimalFormat df =new java.text.DecimalFormat("#.00");
df.format(你要格式化的数字);
例:new java.text.DecimalFormat("#.00").format(3.1415926)
#.00 表示两位小数 #.0000 四位小数 以此类推...
---------------------------------------------------------------
方式三:
double d = 3.1415926;
String result = String .format("%.2f");
%.2f %. 表示 小数点前任意位数 2 表示两位小数 格式后的结果为 f 表示浮点型
---------------------------------------------------------------
方式四:
NumberFormat ddf1=NumberFormat.getNumberInstance() ;
void setMaximumFractionDigits(int digits)
digits 显示的数字位数
为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的
import java.text.* ;
import java.math.* ;
class TT
{
public static void main(String args[])
{ double x=23.5455;
NumberFormat ddf1=NumberFormat.getNumberInstance() ;
ddf1.setMaximumFractionDigits(2);
String s= ddf1.format(x) ;
System.out.print(s);
}
}
*******************************************************
网上一篇关于 Java 中精确计算的文章:
(1)、浮点数精确计算
胜利油田三流合一项目中一直存在一个问题,就是每次报表统计的物资金额和实际的金额
要差那么几分钱,和实际金额不一致,让客户觉得总是不那么舒服,原因是因为我们使用
java 的浮点类型 double 来定义物资金额,并且在报表统计中我们经常要进行一些运算,但
Java 中浮点数(double、float)的计算是非精确计算,请看下面一个例子:
System.out.println(0.05 + 0.01);
System.out.println(1.0 - 0.42);
System.out.println(4.015 * 100);
System.out.println(123.3 / 100);
你的期望输出是什么?可实际的输出确实这样的:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
这 个 问 题 就 非 常 严 重 了 , 如 果 你 有 123.3 元 要 购 买 商 品 , 而 计 算 机 却 认 为 你 只 有
123.29999999999999 元,钱不够,计算机拒绝交易。
(2)、四舍五入
是否可以四舍五入呢?当然可以,习惯上我们本能就会这样考虑,但四舍五入意味着误差
商业运算中可能意味着错误,同时 Java 中也没有提供保留指定位数的四舍五入方法,只提
供了一个 Math.round(double d)和 Math.round(float f) 的方法,分别返回长整型和整型值 。
round 方法不能设置保留几位小数,我们只能象这样(保留两位):
public double round(double value){
return Math.round( value * 100 ) / 100.0;
}
但非常不幸的是,上面的代码并不能正常工作,给这个方法传入 4.015 它将返回 4.01 而不
是 4.02,如我们在上面看到的
4.015 * 100 = 401.49999999999994
因此如果我们要做到精确的四舍五入,这种方法不能满足我们的要求。
还有一种方式是使用 java.text.DecimalFormat,但也存在问题,format 采用的舍入模式是
ROUND_HALF_DOWN(舍入模式在下面有介绍),比如说 4.025 保留两位小数会是
4.02,因为.025 距离” nearest neighbor”(.02 和.03)长度是相等,向下舍入就是.02,如果是
4.0251 那么保留两位小数就是 4.03。
System.out.println(new java.text.DecimalFormat("0.00").format(4.025));
System.out.println(new java.text.DecimalFormat("0.00").format(4.0251));
输出是
4.02
4.03
(3)、浮点数输出(科学记数法)
Java 浮点型数值在大于 9999999.0 就自动转化为科学记数法来表示,我们看下面的例子:
System.out.println(999999999.04);
System.out.println(99999999.04);
System.out.println(10000000.01);
System.out.println(9999999.04);
输出的结果如下:
9.9999999904E8
9.999999904E7
1.000000001E7
9999999.04
但有时我们可能不需要科学记数法的表示方法,需要转换为字符串,还不能直接用
toString()等方法转换,很烦琐。
BigDecimal 介绍
BigDecimal 是 Java 提供的一个不变的、任意精度的有符号十进制数对象。它提供了四个构
造器,有两个是用 BigInteger 构造,在这里我们不关心,我们重点看用 double 和 String 构
造的两个构造器(有关 BigInteger 详细介绍请查阅 j2se API 文档)。
BigDecimal(double val)
Translates a double into a BigDecimal.
BigDecimal(String val)
Translates the String representation of a BigDecimal into a BigDecimal.
BigDecimal(double)是把一个 double 类型十进制数构造为一个 BigDecimal 对象实例。
BigDecimal(String)是把一个以 String 表示的 BigDecimal 对象构造为 BigDecimal 对象实例。
习惯 上, 对于浮 点数 我们都 会定 义为 double 或 float , 但 BigDecimal API 文档 中对 于
BigDecimal(double)有这么一段话:
Note: the results of this constructor can be somewhat unpredictable. One might assume that new
BigDecimal(.1) is exactly equal to .1, but it is actually equal
to .10000000000000000555111512312578 27021181583404541015625. This is so because .1
cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite
length). Thus, the long value that is being passed in to the constructor is not exactly equal to .1,
appearances notwithstanding.
The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal(".1") is
exactly equal to .1, as one would expect. Therefore, it is generally recommended that the (String)
constructor be used in preference to this one
下面对这段话做简单解释:
剩余15页未读,继续阅读
liu472
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0