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

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

  1. java 保留小数点后指定位数四种方法

    1 package com.itheima_01; 2 3 import java.math.BigDecimal; 4 import java.text.DecimalFormat; 5 impor ...

  2. Js 和 PHP 中保留小数点后X位数的方法 toFixed、round、number_format、sprintf

    在 Javacript 中保留小数点后两位数的方法为 toFixed(2),其中的2为保留两位,写多少就保留多少了,满5进1. Javacript例子: var num = 24.54789523; ...

  3. 在html的JavaScript部分计算,保留小数点后面的位数

    例: f_pbf = ((f_boday_fat/f_weight)*100).toFixed(1);      注:例子中的.toFixed(1)是所用函数,确保在所得结果中保留小数点后面一位数,若 ...

  4. java保留小数点后位数以及输出反转数字

    //方法一double b = 8.0/3.0; //与C语言不同,此处8.0和8有所区分 String format = String.format("%.2f,b"); //表 ...

  5. 实用---java保留小数点后位数以及输出反转数字

    //方法一double b = 8.0/3.0; //与C语言不同,此处8.0和8有所区分 String format = String.format("%.2f,b"); //表 ...

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

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

  7. [Java]对double变量进行四舍五入,并保留小数点后位数

    1.功能 将double类型变量进行四舍五入,并保留小数点后位数 2.代码 import java.math.BigDecimal; import java.math.RoundingMode; im ...

  8. input内强制保留小数点后两位 位数不足时自动补0

    input内强制保留小数点后两位 位数不足时自动补0 小数点后位数超出2位时进行四舍五入 需引入jquery包 1.11.2版本 1 function xiaoshu(x) 2 { 3 var f = ...

  9. JAVA除法保留小数点后两位的两种方法 Java Math的 floor,round和ceil的总结

    floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下 ...

随机推荐

  1. MyEclipse 设置字体

    过了好几年,又开始用myeclipse  都忘了,  这里贴图用于记录 1.打开window - preferences . 2.打开General-Appearance-Colors and Fon ...

  2. Delphi 调试WEBService程序(ISAPI或CGI) 把Web App Debugger executable转换成 ISAPI/NSAPI

      1.新建一个web工程,请选中最下面一项:Web App Debugger executable,Coclass name我们设为demo1: 2.在弹出的WebModule2中右击,在弹出的Ac ...

  3. 从Java视角理解CPU上下文切换(Context Switch)

    从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态   在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快 ...

  4. Erasing Edges - SGU 136(构造多边形)

    题目大意:已知一个多边形上的每条边的中点,还原出来一个多边形. 分析:因为偶数是不固定的,所以可以为任意起点,奇数只有一个,可以所有中点加减算出来第一个点,然后就是简单的向量计算点的位置了...... ...

  5. dom0的cpu hotplug【续】

    上一篇说到,手动xm vcpu-pin住,在hotplug就好了. 本质上,还是因为代码有bug,导致vcpu offline的时候,信息没有清理干净,有残留,当vcpu online的时候,如果调度 ...

  6. 常用iptables规则整理

    1.仅允许内部合法的IP地址访问服务器 #setting access rules #one,in access rules,allow all the ips of hudong.com iptab ...

  7. Python获取当前时间 分类: python 2014-11-08 19:02 132人阅读 评论(0) 收藏

    Python有专门的time模块可以供调用. <span style="font-size:14px;">import time print time.time()&l ...

  8. HBase开发错误记录(一):java.net.UnknownHostException: unknown host: master

    windows下开发HBase应用程序.HBase部署在linux环境中, 在执行调试时可能会出现无法找到主机,类似异常信息例如以下: java.net.UnknownHostException: u ...

  9. 使用php glob函数查找文件,遍历文件目录(转)

    函数说明:array glob ( string $pattern [, int $flags ] )功能:寻找与模式匹配的文件路径,返回包含匹配文件(目录)的数组(注:被检查的文件必须是服务器系统的 ...

  10. 【Spring五】AOP之使用注解配置

    AOP使用注解配置流程: 1.当spring容器启动时候.    < context:component- scan base-package= "cn.itheima03.sprin ...