【问题标题】:How to fetch 3 character in float?如何在浮点数中获取 3 个字符?
【发布时间】:2023-04-09 18:11:01
【问题描述】:

我的浮点值像 0.152545 我只想要 0.1f。
这怎么可能..
通过使用字符串,我得到了字符串值。下面的代码显示了结果。

 String pass = pass.substring(0, Math.min(pass.length(), 3));
 pass=pass+"f";

这给了我像0.1f这样的字符串值,但我只想要像0.1f这样的浮点值。

【问题讨论】:

  • 你为什么不把它转换成浮点数并设置你想要的精度呢?
  • 只是对用法的说明:十分之一,0.1,没有精确的位表示,浮点数只是一个近似值(总和使用 1/32、1/64、1/128、.. .)。所以 1000 * 0.1 不会是 100.0。

标签: java


【解决方案1】:

这将是您应该使用DecimalFormat 的合适位置,而.#f 将是您的案例的模式。

Find more on Number formatting in java.

一些相关问题-

【讨论】:

    【解决方案2】:

    您可以使用 BigDecimal。

    float f = 0.152545f;
    BigDecimal bd = new BigDecimal(f);
    bd = bd.setScale(1, RoundingMode.DOWN);
    f = bd.floatValue();
    

    即使您将浮点数存储为字符串也可以正常工作。

    String floatAsString = "0.152545";
    BigDecimal bd = new BigDecimal(floatAsString);
    bd = bd.setScale(1, RoundingMode.DOWN);
    float f = bd.floatValue();
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      DecimalFormat format = new DecimalFormat("0.0");
      format.setRoundingMode(RoundingMode.DOWN);
      format.setMaximumFractionDigits(1);
      System.out.println(format.format(0.152545) + "f");
      

      【讨论】:

        【解决方案4】:

        怎么样

        float new = Math.round( 10.0 * f ) / 10.0;
        

        这并不精确,因为浮点数/双精度数只是 1/2^n 的有限级数的总和,但对您来说可能已经足够了。

        也许您应该考虑将presenting the float 保留一个有效小数点并在内部保持完全精度?

        干杯,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-25
          • 1970-01-01
          • 1970-01-01
          • 2011-12-07
          • 2022-11-01
          相关资源
          最近更新 更多