Java小数点保留问题

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

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();

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值