Java 保留两位小数
在实际项目开发中,经常会存在浮点数四舍五入保留几位小数的问题,故收集了几种常用方法:
直接上代码(保留两位小数)。
Format.java:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat; class Format {
private double src_num; public Format(double num){
src_num = num;
} /*
* BigDecimal,数字构造
*/
public void fun1() {
BigDecimal bg = new BigDecimal(src_num);
//数字2代表保留两位
double des_num = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(des_num);
} /*
* BigDecimal,字符串构造
*/
public void fun2() {
BigDecimal bg = new BigDecimal(String.valueOf(src_num));
//数字2代表保留两位
double des_num = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(des_num);
} /*
* DecimalFormat
*/
public void fun3() {
//#.00 表示两位小数 ,#.0000四位小数 以此类推...
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(src_num));
} /*
* String.format
*/
public void fun4() {
//%. 表示 小数点前任意位数,2 表示两位小数,格式后的结果为f 表示浮点型
System.out.println(String.format("%.2f", src_num));
} /*
* NumberFormat
*/
public void fun5() {
NumberFormat nf = NumberFormat.getNumberInstance();
//2为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(src_num));
} /*
* Math.round
*/
public void fun6() {
double des_num = (double)Math.round(src_num * 100) / 100;
System.out.println(des_num);
}
}
TestDemo.java:
public class TestDemo {
public static void main(String[] args) {
double num = 3.1415926;
//double num = 4.015;
//double num = 4.016;
//double num = 999999999.015;
Format format = new Format(num);
format.fun1();
format.fun2();
format.fun3();
format.fun4();
format.fun5();
format.fun6();
}
}
让我们看下运行结果:
3.1415926
3.14
3.14
3.14
3.14
3.14
3.14
4.015:
4.01
4.02
4.01
4.02
4.01
4.01
4.016:
4.02
4.02
4.02
4.02
4.02
4.02
999999999.015:
9.9999999901E8
9.9999999902E8
999999999.01
999999999.02
999,999,999.01
9.9999999902E8
普通开发中,对计算精度要求不算太严格的话,上面的方法都适用(科学计数法转换的话会比较繁琐)。
但对于一些精度要求较高的商业运算,误差0.01就可能造成比较大的问题。
产生上述问题的原因还是在于浮点数在计算机中本来就是不精确的,参考:http://justjavac.iteye.com/blog/1073775
从上述结果中,可以看出fun2()和fun4()是始终OK的。
因此推荐两种方式进行浮点数小数位数保留:
①BigDecimal,字符串构造
②String.format转换
Java 保留两位小数的更多相关文章
- java使double保留两位小数的多方法 java保留两位小数
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat d ...
- java保留两位小数
java保留两位小数问题: 方式一: 四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); d ...
- java保留两位小数和js保留两位小数一致性研究
一.java保留两位小数方式 public static void main(String[] args) { System.out.println("=======DecimalForma ...
- Java保留两位小数的几种做法
1. String类型数字始终保留两位小数 , RoundingMode.HALF_UP); return bd.toString(); } /** * 使用DecimalFormat,保留小数点后 ...
- java保留两位小数4种方法(转载)
喵喵最近经常遇到小数点保留的问题,转载一篇Java里面的几种小数点位数控制方法. 这是转载的原地址:https://www.cnblogs.com/chenrenshui/p/6128444.html ...
- java保留两位小数4种方法
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...
- java保留两位小数的方法
01.import java.math.BigDecimal; 02.import java.text.DecimalFormat; 03.import java.text.NumberFormat; ...
- JAVA 保留两位小数的四种方法
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; publiccl ...
- java保留两位小数(不四舍五入)
import java.text.DecimalFormat; import java.math.RoundingMode; class Text{ public static void main(S ...
随机推荐
- sl4j记录
- Android WebView Error – Uncaught TypeError: Cannot call method ‘getItem’ of null at
本质原因是js 没有判断dom 是否加载完毕 其实就是在dom 加载完毕之后处理事件 wv.getSettings().setDomStorageEnabled(true); 转自 蛙齋 http: ...
- WinForm(C#)CheckedlistBox绑定数据,并获得选中的值(ValueMember)和显示文本(DisplayMember)
本文中我将和大家讨论关于在WinForm开发中给CheckedlistBox空间绑定数据源,并获取控件中选中的所有元素的显示文本(DisplayMember)和对应的实际值(ValueMember)的 ...
- [置顶] Oracle 11g R2 RAC:使用 srvctl 工具管理 service 资源
1.使用 srvctl 工具创建 service 资源 srvctl add service -d db_unique_name -s service_name {-r "preferred ...
- Ubuntu server下安装JDK和Tomcat7
服务器是Ubuntu server 12.04 LTS 64bit 所有操作假设已经有root权限,若没有需要添加sudo. 一. 安装JDK 1.去Oracle官网下载jdk-6u45-linux- ...
- JQ滑动导航菜单的实现
前言:不多说直接看效果!!! 这样的菜单我们在一般的网站上见到的也比较多,有比较好的用户体验! 原理:这个很重要,任何的特效只要原理搞明白了,实现起来都是很容易的!这个特效的原理很简单,菜单的样式 ...
- PuTTY?Bash?Out了!!!终端应该这么玩~
由于语言的障碍,国内一直存在一个问题,就是新技术引入太慢.比如PuTTY,其实已停止维护N久了,但大部分人却仍然在用(包括之前的我).比如Bash,明知有那么多的问题,却一直没有什么想法,似乎Linu ...
- Android 连接 SQL Server (jtds方式)——上
本文将介绍开发Android程序,连接SQL Server,通过第三方包jtds的方式. 如果你有同样的需求,请跟着做一遍,博主将以最详细的方式,进行介绍. 首先说明,Java.Android连接SQ ...
- codevs 1282 约瑟夫问题(线段树)
#include<iostream> #include<cstdio> #include<cstring> #define maxn 30010 using nam ...
- css居中技巧
1 text-align: center; 只能对图片,按钮,文字等行内元素(display为inline或inline-block等)进行水平居中.在IE6.7中能对任何元素进行水平居中.另外 ...