Java 三元运算符 - 参数顺序

Java ternary operator - parameter order

我只是不明白我做错了什么。 我正在尝试计算 BCD 所需的字节数。公式相当简单:位数除以二,四舍五入 up.

所以我尝试了这个

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 ++;

但我想了解之前出了什么问题。有人可以解释为什么上面的代码片段没有按预期工作吗?

你的论点顺序错误。三元表达式的一般 for 是:

condition ? return_if_true : return_if_false

如果数字的位数是奇数,你想除以二加一,所以你需要翻转参数:

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);