Java 在不应该的情况下对除法结果进行四舍五入

标签 java double scaling rounding division

所以我有一些代码,通过将“理想”屏幕的大小除以用户屏幕的大小,将图形缩放到用户屏幕的大小。她的是我正在做的事情的代码片段:

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。

最佳答案

在这些行中

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();

关于Java 在不应该的情况下对除法结果进行四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214105/

相关文章:

java - JDBC SQL Server 连接不返回任何结果

java - 具体使用OpenHFT的Chronicle-DeCentered../examples/appreciation/demonstration...怎么样?

java - 检索逗号后的数字(来自双数)

css - CSS : is there a webkit alternative for -moz-crisp-edges? 图像缩放

r - 在两点之间缩放系列

java - 创建一个扩展 Jlabel 的类以将字符串绘制到面板。当前没有显示任何内容

java - 解析整数和 double 之间的不同 NullExceptionHandling

c++ - 为什么我的数字在我的猜数字游戏中计算不正确?

javascript - 使用 D3 JavaScript 进行 X 轴缩放

JAVA-JAXB/将类定义为字段