您的位置:首页 > 编程语言 > Java开发

Java小数点保留问题

2016-09-10 10:13 253 查看
前几天在先笔试的时候遇到一个保留两位小数点的问题,算法很简单,但是保留小数却不知道怎么写,所以在此记录一下。

Java中小数保留有很多种写法,在网上找到了几种比较常用的方法。

1、String.format()

这种方法应该是最好记的,把浮点数转化为字符串。

static double d=3.1415926;

/*
* 方法一:
* String.format
*/
static void f1(){
System.out.println("f1:");
System.out.println(String.format("%.2f", d));
System.out.println(String.format("%.3f", d));
System.out.println(String.format("%.4f", d));
System.out.println(String.format("%.5f", d));
}


输出结果:

f1:

3.14

3.142

3.1416

3.14159

2、DecimalFormat

DecimalFormat 是java.text包中 NumberFormat 的一个具体子类,用于格式化十进制数字。

DecimalFormat 包含一个模式 和一组符号

符号含义:

0 一个数字

# 一个数字,不包括 0

- 缺省负数前缀。

. 小数的分隔符的占位符

, 分组分隔符的占位符

; 分隔格式。

% 乘以 100 和作为百分比显示

? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用

国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代

替十进制分隔符。

X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。

例子:

DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println(df1.format(12.34));
System.out.println(df2.format(12.34));
System.out.println(df3.format(12.34));
System.out.println(df4.format(12.34));


结果:

12.3

12.3

012.340

12.34

3、BigDecimal

System.out.println("f3:");
BigDecimal bd=new BigDecimal(d);
double d1=bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double d2=bd.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
double d3=bd.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);


输出结果:

f3:

3.14

3.142

3.1416

4、NumberFormat

System.out.println("f4:");
NumberFormat nf=NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(d));


输出结果:

f4:

3.14

完整代码:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Format {
static double d=3.1415926;

/*
* 方法一:
* String.format
*/
static void f1(){
System.out.println("f1:");
System.out.println(String.format("%.2f", d));
System.out.println(String.format("%.3f", d));
System.out.println(String.format("%.4f", d));
System.out.println(String.format("%.5f", d));
}

/*
* 方法二:
* DecimalFormat
*/
static void f2(){
System.out.println("f2:");
DecimalFormat df1=new DecimalFormat("#.00");
DecimalFormat df2=new DecimalFormat("0.00");
DecimalFormat df3=new DecimalFormat("00.00");
DecimalFormat df4=new DecimalFormat("##.#");
DecimalFormat df5=new DecimalFormat("0.0%");
System.out.println(df1.format(d));
System.out.println(df2.format(d));
System.out.println(df3.format(d));
System.out.println(df4.format(d));
System.out.println(df5.format(d));
}

/*
* 方法三:
* BigDecimal
*/
static void f3(){
System.out.println("f3:");
BigDecimal bd=new BigDecimal(d);
double d1=bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double d2=bd.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
double d3=bd.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
}

/*
* 方法四:
* NumberFormat
*/
static void f4(){
System.out.println("f4:");
NumberFormat nf=NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(d));
}
public static void main(String[] args) {
f1();
f2();
f3();
f4();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java