java中的错误划分

时间:2010-08-24 01:58:10

标签: java

我正在划分两个int值,我希望得到一个双倍的值。但它的工作非常奇怪,它在分割之前具有正确的值,但它没有给出正确的答案。

    public void Analyse() {
        for (FlowPacket fp : this.flow.GetAll()) {
            if (fp.direction==1){
               this.sentPackets++;
               this.sentLength = this.sentLength + fp.packetLength;
            }
            else{
                this.receivedPackets++;
                this.receivedLength = this.receivedLength + fp.packetLength;
            }

        }
        if(this.receivedPackets==0)
                this.receivedPackets = 1;
    }


public double CalcRatio() {
            return (this.sentPackets/this.receivedPackets);
        }

----------------------------主------------------ --------------

System.out.print("Sent packets: " + analyser.getTotalSentPackets() + " , ");
System.out.print("Received packets: " + analyser.getTotalReceivedPackets() + " , ");
System.out.print("ratio: " + analyser.CalcRatio() + " , ");

---------------------------- outout ------------------ ------------

 Sent packets: 2694 , Received packets: 5753 , ratio: 0

6 个答案:

答案 0 :(得分:4)

(double)this.sentPackets/this.receivedPackets

......应该解决它。

答案 1 :(得分:4)

将除法的结果转换为双重AFTER整数除法(向下舍入)。在分割之前将其中一个整数转换为双精度,以便进行双重除法。

答案 2 :(得分:2)

在分割前将至少一个整数投放到(double)

答案 3 :(得分:2)

将int除以int时,答案将为int。因此,它将切断答案中可能存在的任何余数。 为了获得双重答案,您必须将其中一个整数转换为双精度。

答案 4 :(得分:1)

需要施展加倍...

public double CalcRatio() {
            return ( (double) this.sentPackets/ (double) this.receivedPackets);
       }

答案 5 :(得分:0)

这不仅是特定于Java的行为。它在.NET中的工作方式也是一样的。