java 保留小数点后N位数(若干位),几种实现的方式总结
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位数(若干位),几种实现的方式总结的更多相关文章
- java 保留小数点后指定位数四种方法
1 package com.itheima_01; 2 3 import java.math.BigDecimal; 4 import java.text.DecimalFormat; 5 impor ...
- Js 和 PHP 中保留小数点后X位数的方法 toFixed、round、number_format、sprintf
在 Javacript 中保留小数点后两位数的方法为 toFixed(2),其中的2为保留两位,写多少就保留多少了,满5进1. Javacript例子: var num = 24.54789523; ...
- 在html的JavaScript部分计算,保留小数点后面的位数
例: f_pbf = ((f_boday_fat/f_weight)*100).toFixed(1); 注:例子中的.toFixed(1)是所用函数,确保在所得结果中保留小数点后面一位数,若 ...
- java保留小数点后位数以及输出反转数字
//方法一double b = 8.0/3.0; //与C语言不同,此处8.0和8有所区分 String format = String.format("%.2f,b"); //表 ...
- 实用---java保留小数点后位数以及输出反转数字
//方法一double b = 8.0/3.0; //与C语言不同,此处8.0和8有所区分 String format = String.format("%.2f,b"); //表 ...
- 微信小程序 之wxml保留小数点后两位数的方法及转化为字符串的方法
原理:wxml中不能直接使用较高级的js语法,如‘.toFixed’,‘toString()’,但可以通过引入wxs模块实现效果 1.新建`filter.wxs` var filters = { ...
- [Java]对double变量进行四舍五入,并保留小数点后位数
1.功能 将double类型变量进行四舍五入,并保留小数点后位数 2.代码 import java.math.BigDecimal; import java.math.RoundingMode; im ...
- input内强制保留小数点后两位 位数不足时自动补0
input内强制保留小数点后两位 位数不足时自动补0 小数点后位数超出2位时进行四舍五入 需引入jquery包 1.11.2版本 1 function xiaoshu(x) 2 { 3 var f = ...
- JAVA除法保留小数点后两位的两种方法 Java Math的 floor,round和ceil的总结
floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下 ...
随机推荐
- View转化为bitmap
private Bitmap getViewBitmap(View v) { v.clearFocus(); v.setPressed(false); boolean willNotCache = v ...
- ubuntu下使用ngrok外网映射
好久之前想搞明白这个事情,可是就是不知道这个词叫外网映射,所以也一直不知怎么做,在慕课网看用java开发微信公众号的时候教程里提到了外网映射,查了一些资料终于把本地给映射到外网了,直接变成了80端口, ...
- hdu 1081 矩阵最大连续子序列
问题描述:二位平面图,每一个坐标都有值,正值或负值,求任意矩形中和的最大值问题 解决方案:求解图中每一个坐标为起点,求任意长度宽度的矩形的和 #include<iostream> #inc ...
- Hadoop Hive概念学习系列之什么是Hive?(一)
参考 <Hadoop大数据分析与挖掘实战>的在线电子书阅读 http://yuedu.baidu.com/ebook/d128cf8e33687e21 ...
- Java宝典
本人最近参加了几家公司的面试,在其中发现了不少笔试题,虽然是平常再简单不过的,但一不小心还是会出错.今天特意找时间写下来和大家分享. 1.访问控制符权限问题. 同一个包中 同一个类中 不同包的子类 ...
- bzoj3907: 网格
http://www.cnblogs.com/Tunix/p/4354348.html #include<cstdio> #include<cstring> #include& ...
- 【题解】警位安排( 树形 DP)
[题目描述]一个重要的基地被分成了 n 个连通的区域 , 出于某种原因 , 这个基地以某一个区域为核心,呈一树形分布.在每个区域里安排警卫的费用是不同的,而每个区域的警卫都可以望见其相邻的区域 .如果 ...
- config 数据库字符串的读取、修改 分类: WebForm 2014-12-16 10:24 203人阅读 评论(0) 收藏
config数据库字符串: <connectionStrings> <add name="MyWebDataString" connectionString= ...
- Video标签播放视频?谷歌浏览器?safari?? 谷歌浏览器播放不了mp4格式的视频的原因
webm格式和mp4格式,判断了浏览器能否支持的视频类型后,给了一个if判断,如果是支持mp4格式,就返回视频后缀mp4,如果是webm,就返回后缀webm.结果,在谷歌浏览器中播放不了,为什么我指定 ...
- 浅谈UML中类之间的五种关系及其在代码中的表现形式
本文转载:http://www.cnblogs.com/DebugLZQ/archive/2013/05/13/3066715.html 什么是类? 将某类东西归纳在一起,可以成为一个类. 类有很多种 ...