NumberFormat取消Double科学计数法
NumberFormat取消Double科学计数法
blackgladiolus 发表于2年前
NumberFormat取消Double科学计数法
  • 发表于 2年前
  • 阅读 40
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

import java.text.NumberFormat;

public static void main(String[] args) {

Double num = new Double("1234567890.1234567890");

System.out.println("格式化前:"+num);

NumberFormat nf = NumberFormat.getInstance();

nf.setMaximumFractionDigits(7);//设置保留多少位小数

nf.setGroupingUsed(false);//取消科学计数法

System.out.println("格式化后:"+nf.format(num));

}

结果:

格式化前:1.2345678901234567E9

格式化后:1234567890.123457

注意:

由于Double 本身的精度只能到小数点后七位,所以上面即使nf.setMaximumFractionDigits(100);结果还是保留到小数点后7位!

 

换成BigDecimal 则可以精确到Integer.MAX_VALUE

public static void main(String[] args) {

BigDecimal num=new BigDecimal("1234567890.123456789012345");

System.out.println("格式化前:"+num);

NumberFormat nf = NumberFormat.getInstance();

nf.setMaximumFractionDigits(15);//设置保留多少位小数

nf.setGroupingUsed(false);//取消科学计数法

System.out.println("格式化后:"+nf.format(num));

}

结果:

格式化前:1234567890.123456789012345

格式化后:1234567890.123456789012345

 

--------------------------------下面是设置精度部分的源码-----------------------------------

默认精度为:private int    maximumFractionDigits = 3;    // invariant, >= minFractionDigits

   public void setMaximumFractionDigits(int newValue) {
        maximumFractionDigits = Math.max(0,newValue);
        if (maximumFractionDigits < minimumFractionDigits) {
            minimumFractionDigits = maximumFractionDigits;
        }
    }

   public void setMaximumFractionDigits(int newValue) {
        maximumFractionDigits = Math.min(Math.max(0, newValue), MAXIMUM_FRACTION_DIGITS);
        super.setMaximumFractionDigits((maximumFractionDigits > DOUBLE_FRACTION_DIGITS) ?
            DOUBLE_FRACTION_DIGITS : maximumFractionDigits);
        if (minimumFractionDigits > maximumFractionDigits) {
            minimumFractionDigits = maximumFractionDigits;
            super.setMinimumFractionDigits((minimumFractionDigits > DOUBLE_FRACTION_DIGITS) ?
                DOUBLE_FRACTION_DIGITS : minimumFractionDigits);
        }
    }

 

    static final int MAXIMUM_INTEGER_DIGITS  = Integer.MAX_VALUE;
    static final int MAXIMUM_FRACTION_DIGITS = Integer.MAX_VALUE;

    public static int max(int a, int b) {
        return (a >= b) ? a : b;
    }

    public static int min(int a, int b) {
        return (a <= b) ? a : b;
    }

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 7
码字总数 3324
×
blackgladiolus
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: