【问题标题】:How to convert from float to bigDecimal in java?如何在 java 中从 float 转换为 bigDecimal?
【发布时间】:2011-04-19 05:54:16
【问题描述】:

如何在java中将float转换为bigDecimal?

【问题讨论】:

    标签: java floating-point bigdecimal


    【解决方案1】:
    BigDecimal value = new BigDecimal(Float.toString(123.4f));
    

    javadocs 开始,字符串构造函数通常是将float 转换为BigDecimal 的首选方法,因为它不会受到BigDecimal(double) 构造函数的不可预测性的影响。

    引用自文档:

    注意:对于其他 float 和 double NaN 和 ±Infinity 的值,此构造函数与 Float.toString(float) 和 Double.toString(double) 返回的值兼容。 这通常是将 float 或 double 转换为 BigDecimal 的首选方法,因为它不会受到 BigDecimal(double) 构造函数的不可预测性的影响。

    【讨论】:

    • 但是将 float 显式转换为字符串并不能帮助您自动解决不可预测性 - 您需要注意正确格式化值(舍入等)。
    • 如何将 9.991f 转换成 910 和 9.99f 转换成 9.99?
    【解决方案2】:
    float f = 45.6f;
    BigDecimal bd = BigDecimal.valueOf(f);
    

    引用自文档:

    注意:这通常是转换双精度(或 float) 转换为 BigDecimal,因为返回的值等于 由使用结果构造 BigDecimal 产生的 Double.toString(double).

    参考:BigDecimal (Java Platform SE 6)

    【讨论】:

    • Double.toString(float) 产生的结果与 Float.toString(float) 不同。
    • BigDecimal.valueOf( 1.1f ) 导致1.100000023841858
    【解决方案3】:

    小数点后3位精度:

    BigDecimal value = new BigDecimal(f,
            new MathContext(3, RoundingMode.HALF_EVEN));
    

    【讨论】:

    • 如何将 9.991f 转换成 910 和 9.99f 转换成 9.99?
    【解决方案4】:

    据我所知:

       public static BigDecimal floatToBigDecimal(Float a){
    
    
        if(a == null || a.isInfinite() || a.isNaN()){
            return BigDecimal.ZERO;
        }
        try{
            return BigDecimal.valueOf(a);
    
        }catch(Exception e){
            return BigDecimal.ZERO;
        }
    
    }
    

    *注意:这通常是将双精度(或浮点数)转换为 BigDecimal 的首选方法,因为返回的值等于从使用 Double.toString(double) 的结果构造 BigDecimal 的结果。

    public static BigDecimal valueOf(double val)

    参数
    val - double 转换为 BigDecimal。
    返回
    一个 BigDecimal,其值等于或大约等于 val 的值。
    抛出:
    NumberFormatException - 如果 val 是无限或 NaN。
    自:
    1.5

    我已经检查了 Infinite 或 Not a Number,这样 NumberFormatException 的机会就会减少

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多