2013-04-25 136 views
0
public static int calculateBSA(double height, double grams) { 
    double weightforBmi = convertGramsToPounds(grams); 
    return (int) Math.sqrt(((convertCentimeterToInches(height) * weightforBmi)/3131)); 
} 

这里是我的代码转换厘米英寸和克到磅。BSA计算结果我零

private static double convertCentimeterToInches(double height) { 
    return (Math.round((height/2.54) * 100)/100); 
} 

public static int convertGramsToPounds(double grams) { 
    double gramsToPoundUnit = .00220462262; 
    double pounds = (grams * gramsToPoundUnit); 
    return (int)(Math.round(pounds * 100)/100); 
} 

BSA计算结果我总是Zero。我是否正确地在BSA内部完成Math.sqrt。

回答

1

如果你打电话

calculateBSA(1E4,1E4)

它返回5.对于r由于您将它转换为int,克罗地亚convertGramsToPounds(双克)的小值返回0。 calculateBSA和convertCentimeterToInches方法类似。如果您可以接受双倍数值,可以将代码修改为:

public double calculateBSA(double height, double grams) { 
    double weightforBmi = convertGramsToPounds(grams); 
    return Math.sqrt(((convertCentimeterToInches(height) * weightforBmi)/3131)); 
} 

private double convertCentimeterToInches(double height) { 
    return (height/2.54); 
} 

public double convertGramsToPounds(double grams) { 
    double gramsToPoundUnit = .00220462262; 
    double pounds = (grams * gramsToPoundUnit); 
    return pounds; 
} 
1

如果其中一个计算结果小于1,则结果为0。

3

使方法calculateBSA & convertGramsToPounds返回double而不是int。由于您的double gramsToPoundUnit = .00220462262;小于1,因此导致int正在返回0,这导致了问题。

另外,由于您的值很小(gramsToPoundUnit),所以您传递给calculateBSAgrams值会更好,以获得一些正确的结果!

例如: - 经过上述改变完成,

calculateBSA(103.2,5000.4)给出0.37487355474941564