小编典典

Java四舍五入除法结果

java

因此,我有一些代码可以通过将“理想”屏幕的大小除以用户屏幕的大小来将图形缩放到用户屏幕的大小。她是我在做什么的代码片段:

public void setScaleFactor(GameContainer ui) {
    scaleFactorWidth = 2880 / ui.getWidth();
    scaleFactorHeight = 1800 / ui.getHeight();

    System.out.println("Screen measured as: "
            + Integer.toString(ui.getWidth()) + "x"
            + Integer.toString(ui.getHeight()));

    System.out.println("Scale factors are: "
            + Double.toString(scaleFactorWidth) + " "
            + Double.toString(scaleFactorHeight));

    textScale = (scaleFactorWidth + scaleFactorHeight) / 2;

    System.out.println("Text scale is: " + Double.toString(textScale));
}

现在,如果我在计算机上(屏幕分辨率为1440x900的Mac Book pro)运行此程序,结果是“ scaleFactorWidth”设置为2.0,而“
scaleFactorHeight”设置为2.0,这是预期的,因为我的屏幕正好是一半目标的大小。但是,如果在具有不同分辨率屏幕的计算机上运行此代码,则scaleFactors似乎会被四舍五入,我在1024x600的屏幕上进行了测试,并且在应将“
scaleFactorWidth”设置为2.0时将“ scaleFactorHeight”设置为3.0。已经是2.8125 x 3.0。

这是Java中的某种舍入错误吗?如果是的话,我该如何解决?

编辑: 感谢所有的帮助,我意识到我非常愚蠢,因为我需要做的只是将.0添加到2880和1800。


阅读 416

收藏
2020-11-30

共1个答案

小编典典

在这些行中

scaleFactorWidth = 2880 / ui.getWidth();
scaleFactorHeight = 1800 / ui.getHeight();

计算本身是基于整数的(根据的后续调用Integer.toString())。然后只将结果强制转换为double

为了使实际的计算使用double值,请改用以下代码:

scaleFactorWidth = 2880.0 / ui.getWidth();
scaleFactorHeight = 1800.0 / ui.getHeight();

要么

scaleFactorWidth = 2880.0 / (double)ui.getWidth();
scaleFactorHeight = 1800.0 / (double)ui.getHeight();
2020-11-30