当前位置: 首页 > 知识库问答 >
问题:

将整数分数转换为双精度

段超
2023-03-14

我试图得到一个double(由两个int的分数得到)作为我下面函数的返回值。

public static double getThresHold(int n) {

    int i, j;
    int openSites = 0;
    Percolation percolation = new Percolation(n);
    do {
        i = StdRandom.uniform(n) + 1;
        j = StdRandom.uniform(n) + 1;
        if ( !percolation.isOpen(i, j) ) {
            percolation.open(i, j);
            openSites++;
        }
    } while (!percolation.percolates());

    double threshold = openSites * 1.0 / n*n;
    return threshold;
}

但结果总是错的,我得到的价值如:

200.0
240.0
260.0

预期结果应介于0.60.5

我的代码有什么问题!

谢谢

共有2个答案

寇升
2023-03-14
double threshold = openSites * 1.0 / (n*n);

只需在除数周围添加括号。不需要强制转换为两倍,因为您将openSites与1.0相乘,这使得表达式openSites*1.0成为两倍。

因此,您的错误实际上不是铸造问题,而是首先将openSites*1.0除以n,然后将结果乘以n。因此,在您的版本中,您基本上得到了openSites*1.0

尉迟兴修
2023-03-14

openSites*1.0/n*n是从左到右计算的,所以相当于((openSites*1.0)/n)*n,等于openSites

您应该使用括号来强制操作的顺序,而不是乘以1.0,您可以通过将openSites转换为来强制浮点除法:

double threshold = (double)openSites / (n*n);

这也行,但我觉得不那么优雅:

double threshold = openSites * 1.0 / (n*n);
 类似资料:
  • 问题内容: 我的json中有整数,并且我不希望gson将其转换为双精度。以下内容不起作用: 输出不是我想要的: 有没有办法在我的地图中使用整数而不是双精度? 编辑: 不是我所有的字段都是整数。我已经相应地修改了我的示例。我已经在线阅读了很多示例,包括此站点上的一些答案,但在特定情况下不起作用。 问题答案: 1)您必须创建自定义而不是您的问题。 2)我不认为这种行为来自解串器。它更像是json对象/

  • 问题内容: 为什么会收到错误,我该如何解决? 如您所见,在声明变量时,我已经尝试过用顶部附近的位置进行替换,但是似乎并没有完成任务。 问题答案: 更改使用数组索引从double到INT所有变量(即变量,,)。数组索引是整数。

  • 我想用一个小数点和一个小数位的格式将任何双精度四舍五入为双精度,这样29575.347434将是2.3。 我试着用decimalFormat做这个,但当我试着我只得到了一个29575.3格式的字符串,带有一个,我不知道如何在保留值为双精度的同时去掉所有小数点。

  • 问题内容: 我正在尝试将双精度分隔为整数和小数部分 因此,例如,数字24.4应该分为24和4。 使用此方法可为我提供以下值: 我需要十进制的值为4。 如何解决这个问题? 问题答案: 你可以做一个String 。然后Integer 取回两个整数分量。

  • 我想有一个浮子阵列(双打) 然后我有一个返回最大值的函数 我在将基元数据类型转换为集合时遇到问题。我尝试将其转换为双列表,尝试将myArr转换为char / String来检查一些事情,但显然没有任何效果。 我一直看到原始数据类型的编译错误。我也尝试了< code>Double,但是没有成功。 我怎么可能将数组转换为集合

  • 我想把双精度数字转换为十进制。 例如,我有23.43,双倍值是(使用matlab):174 71 255 122 20 110 55 64现在有了这个,我怎么写一个java程序给我23.43? 下面是matlab中双精度的计算: 1的51到0的分数f