文档章节

NumberFormat取消Double科学计数法

blackgladiolus
 blackgladiolus
发布于 2016/11/18 18:28
字数 278
阅读 60
收藏 0

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;
    }

 

© 著作权归作者所有

共有 人打赏支持
blackgladiolus
粉丝 1
博文 7
码字总数 3324
作品 0
南昌
程序员
Java中解决浮点数精度的问题

问题描述 在项目中用Java做浮点数计算时,发现对于4.015*100这样的计算,结果不是预料中的401.5,而是401.49999999999994。如此长的位数,对于显示来说很不友好。 问题原因:浮点数表示 查阅...

GreenDay
2016/09/30
81
0
怎样不让页面显示科学计数法

本人现在用EL表达式写了个数据到table中但是table中显示时是科学计数法 但是我现在想取消这种科学计数法 让他显示本来的数据 (数据库中显示的是无科学计数法)

最晴天
2012/03/12
2.8K
6
据说有99%的人都会做错的面试题

这道题主要考察了面试者对浮点数存储格式的理解。另外,请不要讨论该题本身是否有意义之类的话题。本题只为了测试面试者相关的知识是否掌握,题目本身并没有实际的意义。 下面有6个浮点类型变...

androidguy
06/29
0
0
关于Double科学计数法的问题

请教大虾,我用hibernate保存数据时,有个属性是double类型的,但是当我输入的这个值大于7位时,由于double科学计数法了,就保存失败了。 请问下这个问题该怎么解决。

子凡
2011/07/05
1K
2
计算金额 财务计算 精确运算 BigDecimal用法详解

一、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效 位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算...

jerry__sun
2016/07/07
581
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
48分钟前
0
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
1
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
4
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部