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 ...
随机推荐
- ss sp行情
SS Securities Standard SP Securities Premium 優行情質 Securities Standard (SS), Premium (SP), FullTick S ...
- nginx 配置301转发
学习nginx 推荐 http://www.nginx.cn/nginx-how-to 1. 设置域名解析 daijun.me 指向 234.33.22.21 2.主机234.33.22.21 ngi ...
- 6th day
时光荏苒,岁月如梭,2016年马上就要过去了,今天PHP的核心知识基本上已经讲完,后面就要开始学习数据库,做项目之类的,心情还真是有点小激动.总之,新年新气象,祝愿各位在新的一年里能够心想事成,好好学 ...
- Linux Shell编程学习笔记
打算在学习过程中将每个写过的程序一个个的往上贴; 2015-07-03 1. 鸟叔第三版13.2.1节“利用日期进行文件的创建” 源代码 #!/bin/bashPATH=/bin:/sbin:/usr ...
- 如何提高Lucene构建索引的速度
如何提高Lucene构建索引的速度 hans(汉斯) 2013-01-27 10:12 对于Lucene>=2.3:IndexWriter可以自行根据内存使用来释放缓存.调用writer.set ...
- VIPServer VS LVS
http://www.cnblogs.com/nanyangzp/p/5552725.html
- Qt 学习之路 :Qt 线程相关类
希望上一章有关事件循环的内容还没有把你绕晕.本章将重新回到有关线程的相关内容上面来.在前面的章节我们了解了有关QThread类的简单使用.不过,Qt 提供的有关线程的类可不那么简单,否则的话我们也没必 ...
- C/C++笔试题整理
1. C的结构体和C++结构体的区别 (1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数.所以C的结构体是没有构造函数.析构函数.和this指针的. (2)C的结构体对 ...
- 对于android拦截短信的一些疑问
最近折腾android4.4短信拦截的问题,要求在app上收到短信的时候弹出提示,并显示的功能. 然后找到了使用broadcastreceiver和contentprovider两种方法,那么问题来了 ...
- android EditText设置光标、边框和图标
控制边框形状,先在drawable中建一个xml文件:shape.xml <?xml version="1.0" encoding="utf-8"?> ...