试图在Java中返回一个分数(作为一个浮点数)

时间:2017-02-09 04:50:00

标签: java string floating-point return

在此功能中:

public float cgRatio(String dna) {
    //initialize count to be 0
    int count = 0;
    //for each character in the string
    //if character == 'C' or 'G' increment count
    for (int i = 0; i < dna.length(); i++) {
        char c = dna.charAt(i);
        if (c == 'C' || c == 'G') {
            count++;
        }
    }
    //return the ratio of C & G in DNA strand
    return count/dna.length();
}

使用我的测试功能:

public void testFindGene() {
    String[] dnaStrands = new String[6];
    dnaStrands[0] = "AGCATGGTAACCAATAAGCGTTAAGCCAT";
    dnaStrands[1] = "AATAATGGCATGGCCAATGAATGCGTAACCGATTAA";
    dnaStrands[2] = "ATAATGCGGAATTGACATGGTA";
    dnaStrands[3] = "AGCATGGTAACCAATTAGCGTTAAGCCAT";
    dnaStrands[4] = "AATAATGGCATGGCCAATGAATTGACGTAACCGATTAA";
    dnaStrands[5] = "ATAATGCGGAATCTAGACATGGTA";

    for (int i = 0; i < dnaStrands.length - 1; i++) {
        String gene = findGene(dnaStrands[i], 0);
        System.out.println("The DNA strand is: \"" + dnaStrands[i] + "\"");
        System.out.println("Gene: " + gene);
        System.out.println("CG ratio of gene sequence is: " + String.format("%.02f", cgRatio(gene)));
    }
}

我的cgRatio返回值始终为0.00。如果我只返回计数,我会以浮点数的形式得到准确的结果。所以这意味着我的cgRatio函数在这一行失败了:

    //return the ratio of C & G in DNA strand
    return count/dna.length();

你能不能用Java返回一个分数?如果可以,我该如何解决这个问题?如果你不能,为什么以及什么是替代解决方案?

4 个答案:

答案 0 :(得分:3)

尝试做,

return (float)count/dna.length();

计数长度都是int,这就是为什么你会这样。

答案 1 :(得分:2)

将计数声明为浮点数也可以解决问题。整数除法产生一个整数并省略分数。

float count = 0;

答案 2 :(得分:1)

在划分return (double)count/(double)dna.length();之前转换变量.Java正在整数除法,因为它们都是整数。

答案 3 :(得分:1)

有关实际发生情况的更多说明,请参阅

return count/dna.length();

正在进行整数数学然后将结果转换为浮点数。

例如,如果count为5且dna.length()返回7,则

5/7 = 0.714,在进行整数运算时等于0(向下舍入到最接近的整数值)。

所以你的代码实际上是在执行float(0),它得到0.00的结果。