我只是不知道自己做错了什么。 我试图计算BCD所需的字节数。公式相当简单:位数除以2,舍入向上。
所以我试过这个
int halfRoundedUp = isOddNumberOfDigits ? (numberOfDigitsInParameter/2) : (numberOfDigitsInParameter/2 + 1);
或
int halfRoundedUp = isOddNumberOfDigits ? (numberOfDigitsInParameter/2) : ((numberOfDigitsInParameter/2) + 1);
或者,因为它在逻辑上更有声音,原来是这样的:
int halfRoundedUp = isOddNumberOfDigits ? (numberOfDigitsInParameter/2) : ((numberOfDigitsInParameter + 1) /2);
有几种变化和包围。很多括号。设置标志时,它会一直返回错误的值;它应该在减半后添加+1,但它不会。
此解决方法可以正常使用
int halfRoundedUp = numberOfDigitsInParameter/2;
if (isOddNumberOfDigits)
halfRoundedUp ++;
但我想了解以前出了什么问题。有人可以解释为什么上面的代码片段没有按预期工作吗?
答案 0 :(得分:4)
你的论点错误。三元表达的一般表达是:
condition ? return_if_true : return_if_false
如果数字有一个奇数位数,你想要除以2并加一,所以你需要翻转参数:
int halfRoundedUp = isOddNumberOfDigits ?
numberOfDigitsInParameter / 2 + 1 :
numberOfDigitsInParameter / 2;
编辑:
即使问题是关于三元运算符的使用,我必须个人说,我只是使用java.util.Math.ceil(double)
:
// note the floating point division
int halfRoundedUp = Math.ceil(numberOfDigitsInParameter / 2.0);