Java中double类型四舍五⼊的⽅法总结代码:
double a = 13.245;
//⽅法⼀:
BigDecimal bd= new BigDecimal(a);
Double b = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("⽅法⼀: "+b);
//⽅法⼆:
Double myValue = new BigDecimal(a).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); NumberFormat nf = Instance();
nf.setGroupingUsed(false);
System.out.println("⽅法⼆: "+myValue);
//⽅法三:
// #.00 表⽰两位⼩数 #.0000四位⼩数
DecimalFormat df2 =new DecimalFormat("#.00");
String str2 =df2.format(a);
System.out.println("⽅法三: "+str2);
//⽅法四:
//%.2f 中的% 表⽰ ⼩数点前任意位数  2 表⽰两位⼩数 格式后的结果为f 表⽰浮点型
String result = String.format("%.2f", a);
System.out.println("⽅法四: "+result);
解析:
//保留两位时 :0.245  0.295  保留⼀位时: 0.45 0.95
当double  a = 13.245时,输出结果为:
⽅法⼀: 13.24
⽅法⼆: 13.24
⽅法三: 13.24
⽅法四: 13.25
当double  a = 13.295时,输出结果为:
⽅法⼀: 13.29
⽅法⼆: 13.29
⽅法三: 13.29
bigdecimal格式化两位小数
⽅法四: 13.30
当保留⼀位⼩数时,若⼩数点后两位是 45 或 95 时,前三个⽅法也会有误差.
当double  a = 0.295时,输出结果为:
⽅法⼀:  0.29
⽅法⼆:  0.29
⽅法三:  .29
⽅法四:  0.30
当⼩数点前的数只有⼀个 0 时,可以发现⽅法三错的离谱.
综上,显然,使⽤第四种⽅法进⾏四舍五⼊更加精确.
===
public static void main(String[] args) {
System.out.println("向上取整:" + (int) il(96.1));// 97 (去掉⼩数凑整:不管⼩数是多少,都进⼀)
System.out.println("向下取整" + (int) Math.floor(96.8));// 96 (去掉⼩数凑整:不论⼩数是多少,都不进位)        System.out.println("四舍五⼊取整:" + und(96.1));// 96 (这个好理解,不解释)
System.out.println("四舍五⼊取整:" + und(96.8));// 97
}
===
DecimalFormat;
DecimalFormat    df  = new DecimalFormat(">#0.00");
double d1 = 3.23456
double d2 = 0.0;
double d3 = 2.0;
df.format(d1);
df.format(d2);
df.format(d3);
3个结果分别为:
3.23
0.00
2.00
java保留两位⼩数问题:
⽅式⼀:
四舍五⼊
double  f  =  111231.5585;
BigDecimal  b  =  new  BigDecimal(f);
double  f1  =  b.setScale(2,  BigDecimal.ROUND_HALF_UP).doubleValue();
⽅式⼆:
df.format(你要格式化的数字);
例:
DecimalFormat("#.00").format(3.1415926)
#.00 表⽰两位⼩数 #.0000四位⼩数 以此类推...
⽅式三:
double d = 3.1415926;
String result = String .format("%.2f");
%.2f %. 表⽰ ⼩数点前任意位数  2 表⽰两位⼩数 格式后的结果为f 表⽰浮点型
NumberFormat NumberInstance() ;
void setMaximumFractionDigits(int digits)
digits 显⽰的数字位数
为格式化对象设定⼩数点后的显⽰的最多位,显⽰的最后位是舍⼊的
* ;
import java.math.* ;
class TT
{
public static void main(String args[])
{ double x=23.5455;
NumberFormat NumberInstance() ;
ddf1.setMaximumFractionDigits(2);
String s= ddf1.format(x) ;
System.out.print(s);
}
}
*;
DecimalFormat df=new DecimalFormat(".##");
double d=1252.2563;
String st=df.format(d);
System.out.println(st);
1. 功能
将程序中的double值精确到⼩数点后两位。可以四舍五⼊,也可以直接截断。
⽐如:输⼊12345.6789,输出可以是12345.68也可以是12345.67。⾄于是否需要四舍五⼊,可以通过参数来决定(RoundingMode.UP/RoundingMode.DOWN等参数)。
2. 实现代码
package com.clzhang.sample;
import java.math.BigDecimal;
import java.math.RoundingMode;
DecimalFormat;
NumberFormat;
public class DoubleTest {
/**
* 保留两位⼩数,四舍五⼊的⼀个⽼⼟的⽅法
* @param d
* @return
*/
public static double formatDouble1(double d) {
return (und(d*100)/100;
}
/**
* The BigDecimal class provides operations for arithmetic, scale manipulation, rounding, comparison, hashing, and format conversion.    * @param d
* @return
*/
public static double formatDouble2(double d) {
// 旧⽅法,已经不再推荐使⽤
//        BigDecimal bg = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP);
// 新⽅法,如果不需要四舍五⼊,可以使⽤RoundingMode.DOWN
BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
return bg.doubleValue();
}
/**
* NumberFormat is the abstract base class for all number formats.
* This class provides the interface for formatting and parsing numbers.
* @param d
* @return
*/
public static String formatDouble3(double d) {
NumberFormat nf = NumberInstance();
// 保留两位⼩数
nf.setMaximumFractionDigits(2);
// 如果不需要四舍五⼊,可以使⽤RoundingMode.DOWN
nf.setRoundingMode(RoundingMode.UP);
return nf.format(d);
}
/**
* 这个⽅法挺简单的。
* DecimalFormat is a concrete subclass of NumberFormat that formats decimal numbers.
* @param d
* @return
*/
public static String formatDouble4(double d) {
DecimalFormat df = new DecimalFormat("#.00");
return df.format(d);
}
/**
* 如果只是⽤于程序中的格式化数值然后输出,那么这个⽅法还是挺⽅便的。
* 应该是这样使⽤:System.out.println(String.format("%.2f", d));
* @param d
* @return
*/
public static String formatDouble5(double d) {
return String.format("%.2f", d);
}
public static void main(String[] args) {
double d = 12345.67890;
System.out.println(formatDouble1(d));
System.out.println(formatDouble2(d));
System.out.println(formatDouble3(d));
System.out.println(formatDouble4(d));
System.out.println(formatDouble5(d));
}
}
3. 输出
12345.68
12345.68
12,345.68
12345.68
12345.68
在法语环境下,除了前两种⽅法显⽰正常之外,后边三种⽅法会将⼩数点显⽰成逗号,如果做国际化要注意===

发表评论