import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
/**
* java 保留小数点后N位数(若干位)位,几种实现的方式总结
* (1)常用的是1.DecimalFormat,和2.BigDecimal
* (2)4.String .format("%.2f",dbstr);
* @author zhangqf
*
*/
public class BigDecimalDemo01 {
public static void main(String[] args) {

/**1.DecimalFormat**/
DecimalFormat decimalFormat=new DecimalFormat();
decimalFormat.applyPattern("############.###############");
//decimalFormat.applyPattern("#.00");//decimalFormat.applyPattern("###,###,###,###.###");
// #.00 表示两位小数 #.0000四位小数 以此类推.
String df="0.000000520";
double d=Double.parseDouble(df);
String testdf=decimalFormat.format(d);
//切记:decimalFormat.format(d);格式里面放的是d是double类型的,不可把df字符串String放进去,
//写代码时不会报错,但运行的时候会报:不合法参数异常
System.out.println("testdf:="+testdf);
/**1.1.DecimalFormat变形使用,当输入数较大16位左右或小数位0超过5位以上例如:0.00000005,就会变成科学计数法的形式**/
String strdf1="12.0123";
String strdf2="0.000000005";
String strMul=mul(strdf1, strdf2);
System.out.println("strMul:="+strMul);
/*1.和1.1DecimalFormat运行结果
* 0.00000052----testdf
61.7283945617283945====strMul*/

/**2.BigDecimal,一般也用于java计算器加减乘除**/
double bdf=0.0078123456789;
BigDecimal bigDecimal=new BigDecimal(bdf);
double bdfScale=bigDecimal.setScale(10, BigDecimal.ROUND_HALF_UP).doubleValue();
/*double bdfScale=bigDecimal.setScale(10, BigDecimal.ROUND_HALF_UP).doubleValue();//四舍五入,保留2位小数
double bdf=0.000000078;--小数点后面的0不能多于5个,否则就是科学计数法-->运行结果:7.8E-8=====bdfScale
但是,0.0078123456789这种就不会变成科学计数法
*/
System.out.println("bdfScale:="+bdfScale);

/**3.NumberFormat,数字格式化---数字,货币,百分数,后续专门详细写这个模块,
* 创建格式化器(默认地区Local格式):
NumberFormat.getNumberInstance();
NumberFormat.getCurrencyInstance();
NumberFormat.getPercentInstance();
* **/
Double dbNumberF=new Double("123456789.1236");
System.out.println("dbNumberF:="+dbNumberF);
NumberFormat numberFormat=java.text.NumberFormat.getInstance();
numberFormat.setGroupingUsed(false);//只保留了3位,也会四舍五入
String dbNumFstr=numberFormat.format(dbNumberF);
System.out.println("dbNumberF:"+dbNumFstr);
/* Double dbNumberF=new Double("123456789.123456789");
dbNumberF:=1.2345678912345679E8
dbNumberF:123456789.123*/
/**运行结果:
* dbNumberF:=1.234567891236E8
dbNumberF:123456789.124**/

/*3.1变式2
用NumberFormat的setMaximumFractionDigits方法实现
NumberFormat format=NumberFormat.getNumberInstance() ;
format.setMaximumFractionDigits(int digits) //digits为 显示的数字位数
*/

double number = 23.5455;
NumberFormat format = NumberFormat.getNumberInstance() ;
format.setMaximumFractionDigits(2);
String result = format.format(number) ;
System.out.println("result:="+result);//23.55

/**4.String .format(),一般也用于java计算器加减乘除**/
double dbstr=3.14625789;
String resultStr = String .format("%.2f",dbstr);
/*这个小数格式化:位数不够用0来补,也可四舍五入
String resultStr = String .format("%.2f",dbstr);
3.1462578900*/

System.out.println("resultStr:="+resultStr);

/**5.利用算法实现**/
double numberArith=0.562;//可以是int,也可以是double
/*对于这种类型是有精度丢失,不成立的;double numberArith=0.000000006;输出结果:0.0*/
double resultArith = ((int) (numberArith * 100)) / 100.0;
System.out.println("resultArith:="+resultArith);
}

/**
* * 两个Double数相乘 *
*
* @param v1
* *
* @param v2
* *
* @return String 
*/
public static String mul(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return numFormat(b1.multiply(b2).toString());
}

public static String numFormat(String resultFormat){//double d = 41.123;
String d = resultFormat;
if (d.contains(".")) {
String dot=d.substring(d.indexOf("."), d.length());
DecimalFormat df = new DecimalFormat("#.####################");
//不用指定整数位多少位,这样比较好,以免数很大造成科学计数法
double db=Double.valueOf(dot);
String str=df.format(db);
str=d.substring(0, d.indexOf("."))+str.substring(1, str.length());
//System.out.println(str);
return str;
}
return d;
}
}

运行输出结果:

testdf:=0.00000052
strMul:=6.0000000000615
bdfScale:=0.0078123457
dbNumberF:=1.234567891236E8
dbNumberF:123456789.124
result:=23.55
resultStr:=3.15
resultArith:=0.56

转载于:https://www.cnblogs.com/zhangqf/p/6179945.html

java 保留小数点后N位数(若干位),几种实现的方式总结相关推荐

  1. Android数据的处理(四舍五入、保留小数点后的位数)

    一.Math Math.round //对一个数四舍五入Math.round(11.6) = 12:Math.round(-11.6) = -12: Math.round(-0.1) = 0:Math ...

  2. java保留小数点后两位(小数点保留两位方法)

    java.怎样简便的保留小数点后两位. 有两种情况: 1.只要输出结果的时候可以用以下方法: double x1 = 0.026; System.out.println(String.format(& ...

  3. Java - 保留小数点后两位

    (1)使用BigDecimal ,保留小数点后两位 public static String format1(double value) {BigDecimal bd = new BigDecimal ...

  4. c保留小数点后三位数没有则为0_C语言中……“计算结果保留三位小数。”怎么表示?...

    展开全部 printf("%7.3f",100/3.0);表示结果占七位,小数部分占3位,这样就可以了,并且小数点后第e69da5e6ba9062616964757a6869646 ...

  5. Java保留小数点后两位方法(推荐使用NumberFormat)

    就是 DecimalFormat返回的是String类型,考虑到使用场景一般使用NumberFormat 废话不多说,直接上代码. /*** 两数相除保留小数点后两位*/public static S ...

  6. java保留小数点后几位,不足的用0补

    /*** 将double格式化为指定小数位的String,不足小数位用0补全** @param v 需要格式化的数字* @param scale 小数点后保留几位* @return*/public s ...

  7. c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...

    在小学阶段,孩子的数学学习是从数字开始的.从简单的1-10,然后扩充到100.1000,从简单的加法到计算难度增加的乘除法,孩子从扳手指到运用九九乘法表,孩子的计算能力要求是随着学龄增加而增加的. 不 ...

  8. java保留小数点后7位,不够补0,去小数点存库,带小数点展示

     要求如下: 应用区域坐标经纬度 a)     存库均按照微度,小数点后移7位,不足补0 b)     示例: i.     前端输入 123.1234560 后端存储 1231234560 ii.  ...

  9. c++保留小数点后三位数_C++保留有效位与保留小数位

    如果想要保留n位小数 根据C++官网上的解释,该函数没有指定的返回类型,并且该函数用于设定输出操作上的小数精确位. 然后返回值中解释:未指定返回值,这个函数仅用于数据流修改操作上. 说了这么多,我想要 ...

  10. 微信小程序 之wxml保留小数点后两位数的方法及转化为字符串的方法

    原理:wxml中不能直接使用较高级的js语法,如'.toFixed','toString()',但可以通过引入wxs模块实现效果. 第一步:新建 filter.wxs 文件 var filters = ...

最新文章

  1. 多传感器信息融合算法总结
  2. java的socket读取一行就结束运行了?使用这种方法可以读取多行数据!
  3. qpython怎么用matplotlib_将matplotlib绘图嵌入pyqt的方法示例
  4. 在Linux上安装Python3.6.1
  5. ArcGIS10.6中,在3D分析工具中创建视线之后,怎么将其删除?
  6. 我怀疑对象做了什么对不起我的事......
  7. linux mysql-5.7.13 源码安装,Linux下安装-配置-mysql-5.7.13
  8. libiconv_百度百科
  9. 小马激活报错:已停止工作
  10. C#调用百度大脑API初探2
  11. 3-10 统计输入字符串中的单词个数及单词的平均长度(高教社,《Python编程基础及应用》习题7-7)
  12. 4、使用bean的scop属性来配置bean的作用域
  13. JAVA day06:代码作业(封装)
  14. antv x6踩坑记录二
  15. 日志瘦身神操作:从5G优化到1G到底是怎么做到的!(荣耀典藏版)
  16. php搭建后台 xampp_运行PHP后台项目:xampp下载,安装,配置,运行PHP的web项目
  17. 安居客冲刺上市:姚劲波全力支持,距离贝壳找房还差6个我爱我家
  18. MT7621基于OpenWrt 21.02使用DSA配置VLAN
  19. iOS学习的比较好的博客地址
  20. LTspice入门01——Control Panel(控制面板)

热门文章

  1. caffe MNISTAutoencoder
  2. 商品类别推荐系统:LightGBM模型
  3. 贪心算法小记——代理服务器
  4. 对称 symmetric
  5. 如何准备数学建模?(附建模必备资料)
  6. 第十七天 PYTHON学习
  7. 《图解HTTP》阅读笔记--第六章--HTTP首部
  8. nyoj-78-圈水池(Graham算法求凸包)
  9. [转]MySQL和SQLServer的比较
  10. Luogu P3223 [HNOI2012]排队 组合