文档章节

NumberFormat取消Double科学计数法

blackgladiolus
 blackgladiolus
发布于 2016/11/18 18:28
字数 278
阅读 106
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
51分钟前
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
11
1
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部