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


    显示现象

       

    数据类型

      实体类中为 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是默认转换, 暂时没有找到相关处理方式

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

    使用DecimalFormat将Double格式化为String

     

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

     

     

    public void setTradeAmount(Double tradeAmount) {
        DecimalFormat df = new DecimalFormat("#.###"); 
        this.tradeAmountStr = df.format(tradeAmount);
        this.tradeAmount = tradeAmount;
    }

    设置千分符

    (转)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 = new DecimalFormat();
            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 = new DecimalFormat(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‰

  • 相关阅读:
    hbase全分布安装配置
    ElasticSearch概述及Linux下的单机ElasticSearch安装
    Redis 集群搭建详细指南
    spark集群安装配置
    hbase全分布安装配置
    zookeeper图形界面工具zooinspector
    storm集群安装配置
    kafka集群安装配置
    sqoop配置安装以及导入
    Flume的安装部署
  • 原文地址:https://www.cnblogs.com/jkfeng/p/11937909.html
Copyright © 2020-2023  润新知