避免Double数据显示为科学记数

摘要:
style=“#000.000kg”;df。应用模式;系统输出。println;//模式中的“-”表示输出为负数,应放在前面style=“-0000.00”;df。应用模式;系统输出。println;//模式中的“,”在数字中添加一个逗号,以便于读取数字style=“-00000.0#”;df。应用模式;系统输出。println;//模式中的“E”表示输出是索引。“E”之前的字符串是基本格式//“E”后面的字符串是索引格式style=“0.00E000”;df。应用模式;系统输出。println;//模式中的“%”表示乘以100并将其显示为百分比,该百分比应放在末尾。style=“0.00%”;df。应用模式;系统输出。println;//模式中的“U2030”表示乘以1000并显示为千分之一,应放在末尾。

显示现象

避免Double数据显示为科学记数第1张避免Double数据显示为科学记数第2张

数据类型

实体类中为 private Double tradeAmount;

Oracle数据库中为 NUMBER(19,4)

解决方式

第一种解决方式 -无效

将Double转为String,(String.valueOf(double)方法, 也可以用最笨的方法,就是直接+;如:String str = ""+double;)

第二种解决方式 -引起一系列问题

将实体类中的Double修改为BigDecimal

使用SQL查询时是正常的,但是使用HQL查询异常(hibernate expected type: java.math.BigDecimal, actual value: java.lang.Double)

原因: SQL查询可以设置返回值的类型, 强转为实体类时一一对应; HQL是默认转换, 暂时没有找到相关处理方式

避免Double数据显示为科学记数第3张

第三种方式 - 完美解决(未避免异常,下面代码中需要做非空的判断)

使用DecimalFormat将Double格式化为String

public static voidmain(String[] args) {
    Double tradeAmount = 11111111111110.1050001;
    DecimalFormat df = new DecimalFormat("#,##0.00"); 
    //11,111,111,111,110.11
    String tradeAmountStr =df.format(tradeAmount );
}
public voidsetTradeAmount(Double tradeAmount) {
    DecimalFormat df = new DecimalFormat("#.###"); 
    this.tradeAmountStr =df.format(tradeAmount);
    this.tradeAmount =tradeAmount;
}

设置千分符

避免Double数据显示为科学记数第4张

(转)java DecimalFormat用法
DecimalFormat 是 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

复制代码
DecimalFormat df = newDecimalFormat();
        double data = 1234.56789;
        System.out.println("格式化之前的数字: " +data);
        String style = "0.0";//定义要显示的数字的格式
        df.applyPattern(style);//将格式应用于格式化器
        System.out.println("采用style: " + style + "  格式化之后: " +df.format(data));
        style = "00000.000 kg";//在格式后添加诸如单位等字符
df.applyPattern(style);
        System.out.println("采用style: " + style + "  格式化之后: " +df.format(data));
       //模式中的"#"表示如果该位存在字符,则显示字符,如果不存在,则不显示。
       style = "##000.000 kg";
       df.applyPattern(style);
       System.out.println("采用style: " + style + "  格式化之后: " +df.format(data));
       //模式中的"-"表示输出为负数,要放在最前面
       style = "-000.000";
       df.applyPattern(style);
       System.out.println("采用style: " + style + "  格式化之后: " +df.format(data));
       //模式中的","在数字中添加逗号,方便读数字
       style = "-0,000.0#";
       df.applyPattern(style);
       System.out.println("采用style: " + style + "  格式化之后: " +df.format(data));
       //模式中的"E"表示输出为指数,"E"之前的字符串是底数的格式,
       //"E"之后的是字符串是指数的格式
       style = "0.00E000";
       df.applyPattern(style);
       System.out.println("采用style: " + style + "  格式化之后: " +df.format(data));
       //模式中的"%"表示乘以100并显示为百分数,要放在最后。
       style = "0.00%";
       df.applyPattern(style);
       System.out.println("采用style: " + style + "  格式化之后: " +df.format(data));
       //模式中的"u2030"表示乘以1000并显示为千分数,要放在最后。
       style = "0.00u2030";
       //在构造函数中设置数字格式
       DecimalFormat df1 = newDecimalFormat(style);
       //df.applyPattern(style);
       System.out.println("采用style: " + style + "  格式化之后: " + df1.format(data));
复制代码

格式化之前的数字: 1234.56789
采用style: 0.0 格式化之后: 1234.6
采用style: 00000.000 kg 格式化之后: 01234.568 kg
采用style: ##000.000 kg 格式化之后: 1234.568 kg
采用style: -000.000 格式化之后: -1234.568
采用style: -0,000.0# 格式化之后: -1,234.57
采用style: 0.00E000 格式化之后: 1.23E003
采用style: 0.00% 格式化之后: 123456.79%
采用style: 0.00‰ 格式化之后: 1234567.89‰

免责声明:文章转载自《避免Double数据显示为科学记数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇openwrt ubus (OpenWrt micro bus 架构)一个ROS配置的脚本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[ PyQt入门教程 ] Qt Designer工具的使用

Qt Designer是PyQt程序UI界面的实现工具,使用Qt Designer可以拖拽、点击完成GUI界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。 本文主要内容1、Qt Designer程序主界面窗口介绍。 2、Qt Designer程序实现界面...

itextPDF使用笔记

最近在做报表打印,使用的是itextPDF,第一次用到它,简单做个笔记。主要涉及到字体设置,文字处理操作,表格及单元格设置,绘制一些图形 IText中有三个处理text的类com.lowagie.text.Chunk,com.lowagie.text.Phrase,com.lowagie.text.Paragraph。 官网的API:https://api...

C++学习笔记九顺序容器(二) ForFreeDom 博客园

C++学习笔记九-顺序容器(二) - ForFreeDom - 博客园 一、插入操作如何影响容器的选择: 1.list 容器表示不连续的内存区域,允许向前和向后逐个遍历元素。在任何位置都可高效地 insert 或 erase 一个元素。插入或删除 list 容器中的一个元素不需要移动任何其他元素。另一方面,list 容器不支持随机访问,访问某个元素要求...

常用php操作redis命令整理(三)LIST类型

LIST 头元素和尾元素:头元素指的是列表左端/前端第一个元素,尾元素指的是列表右端/后端第一个元素。举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。空列表:指不包含任何元素的列表,Redis将不存在的key也视为空列表。 LPUSH 将一个或多个值value插入到列表key的表头。如果key不存在,一个空列表会被创建并...

C#中的String类2

                          深入C# String类 C#中的String类 他是专门处理字符串的(String),他在System的命名空间下,在C#中我们使用的是string 小写的string只是大写的String的一个别名(外号)使用大写和小写都是一样的 Using  == import 常用的字符串处理法 Java中常用的...

78.Java集合之Map

Map 如果程序中存储了几百万个学生,而且经常需要使用学号来搜索某个学生,那么这个需求有效的数据结构就是Map。Map是一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。在Map中键(key)可以使任意类型的对象。Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value)。一个键(key)和它对应的值构...