【问题标题】:How to round double to nearest whole number and then convert to a float?如何将双精度数舍入到最接近的整数然后转换为浮点数?
【发布时间】:2012-01-04 07:48:15
【问题描述】:

我正在使用 java.util.Random 来生成随机高斯。我需要将此高斯转换为浮点值。但是 gaussian 是双精度的,所以我需要一些方法来进行舍入,然后将其转换为浮点数。我需要四舍五入到最接近的整数,四舍五入。这是我的问题:如何?

【问题讨论】:

  • “我需要将此高斯转换为浮点值。” ...“我需要四舍五入到最接近的整数”...你想要浮点数还是整数?
  • 您要四舍五入,还是要四舍五入到最接近的整数?
  • 您要四舍五入到最接近的整数,还是四舍五入?这些是不相容的陈述。例如你会如何舍入 3.4?最接近的整数是 3,四舍五入是 4。

标签: java rounding


【解决方案1】:

float b = (float)Math.ceil(a); 要么 float b = (float)Math.round(a);

取决于您的意思是“四舍五入”(round)还是“向上舍入”(ceil)。

注意将双精度浮点数转换为浮点数时会丢失精度,但这在这里应该不是问题。

【讨论】:

  • 感谢您的回复,正是我所要求的
【解决方案2】:

这是一个简单的例子:

public class One {

    /**
     * @param args
     */
    public static void main(String[] args) {

        double a = 4.56777;
        System.out.println( new Float( Math.round(a)) );

    }

}

结果和输出将是:5.0
double a = 4.56777的起始值最接近的上界浮点数
在这种情况下,建议使用round,因为它接受double 值并提供整个long

问候

【讨论】:

  • (float)Math.round(a) 在时间和空间上都是效率的许多倍。
  • 同意。只有在需要访问超类Object的继承方法时才应该使用Float a = new Float("3.14"),例如clone, toString, equals等。 float a = (float) 3.14; 在 OOP 方法中的表现非常糟糕。
  • 我不知道Float a = new Float("3.14") 和它有什么关系。 OP、我和你都没有对此发表任何评论,或者关于 OOP。
  • 这是您帖子的支持论据!是的,铸造浮动是有效的,但浮动包装有它的好处,只是想提醒任何硬币,都有侧面。问候。
  • 但是它不支持我的帖子,并且关于OOP的部分与之相矛盾。下定决心。
【解决方案3】:

【讨论】:

    【解决方案4】:

    物有所值:

    根据输入和下一个整数之间的距离,可以使用 Math.ceil 或 Math.floor 计算下表中显示的与任何给定输入最接近的整数

    +-------+--------+
    | input | output |
    +-------+--------+
    |     1 |      0 |
    |     2 |      0 |
    |     3 |      5 |
    |     4 |      5 |
    |     5 |      5 |
    |     6 |      5 |
    |     7 |      5 |
    |     8 |     10 |
    |     9 |     10 |
    +-------+--------+
    

    private int roundClosest(final int i, final int k) {
        int deic = (i % k);
        if (deic <= (k / 2.0)) {
            return (int) (Math.floor(i / (double) k) * k);
        } else {
            return (int) (Math.ceil(i / (double) k) * k);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 2014-01-30
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多