2017-09-24 52 views
1

我已经给出了一个问题来计算人口(p0)上升或下降到一定数量的人(p)所需的年数(nbYear)if人口将增加/减少百分比(百分比)和额外的人(一年)。在java中使用混合数据类型的数学公式

public static int nbYear(int p0, double percent, int aug, int p) { 
    int nbYear = 0; 
    while(p0 < p){ 
     p0 = p0 + (p0 * percent) + aug; 
     nbYear = nbYear + 1; 
    } 
    return nbYear; 
} 

}

该代码将是确定的,但我得到双倍可能有损转换为int的错误。我的问题是,如何计算一个混合数据类型的数学方程(在这种情况下为int和double)而没有任何信息丢失?

任何帮助非常感谢!

回答

0

无法明确处理数据丢失,您无法将double值分配给int变量。要做到这一点的方法之一是明确使用某个狭窄投给int,在假设人口不能由一个人的部分增加:

p0 = p0 + (int)(p0 * percent) + aug; 
// Here --^ 
+0

难道真的没有怎么一回事,因为这样做会使得任何其他解决方案很多数据丢失,从而导致结果不准确。 – CWilliams

+0

@CWilliams你可以调用'Math.round'而不是投射,但我认为这不会更准确。考虑一个简单的例子 - 你从2人开始,增长率为30%。 2 * 1.3 = 2.6。第二年人口应该怎样? 2或3? – Mureinik

+0

如果您不想丢失数据,请使用双打执行所有计算。如果你想显示为int,则将结果转换为int。 – Christine