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);
我只是不明白我做错了什么。 我正在尝试计算 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);