大家好,下面这一段代码是根据personTypeCode(已知的)来计算结果的,guaranteeSalary 是一个常量 已知的int值,coefficient是一个已知的double值,
为什么计算出来的是 0 ?
补充一下,为什么 (4/9) 等于 0
大家好,下面这一段代码是根据personTypeCode(已知的)来计算结果的,guaranteeSalary 是一个常量 已知的int值,coefficient是一个已知的double值,
为什么计算出来的是 0 ?
补充一下,为什么 (4/9) 等于 0
确定没有少括号???最后那个括号对应的什么
当"w".equals(user.getPersonTypeCode())
为true
时,取4 / 9
等于0
则
guaranteeSalary * 0 + guaranteeSalary * ce.getCoefficient().doubleValue()
当ce.getCoefficient().doubleValue()
为0
则计算结果就是0
我能想到的是,你保存这个结果的变量是 double
类型吗?
另外 4 / 9 = 0
可以看楼下的说明,刚才我说错了。
对于这种不同 PersonType
不同取值的情况,个人的习惯是定义一个静态 Map
来存各种条件下的取值
private static final Map<String, Integer> valueMap;
static {
valueMap = new HashMap();
valueMap.put("A", 1);
valueMap.put("W", 4 / 9);
}
public void func() {
guaranteeSalary *
// getOrDefault 是 Java 8 添加的,如果 JDK 版本不满足,可以自行添加该方法
(valueMap.getOrDefault(user.getPersonTypeCode(), 1) +
ce.getCoefficient().doubleValue());
}
Java中int类型/int类型返回值还是int类型,也就是说4/9的结果等价于0余4,所以4/9=0,
解决方法可以更改4或9的任何一个为浮点类型,例如4.0/9
这样结果就会变成浮点类型了。
希望对你有帮助^_^
三元运算符具有右结合性 也就是说A op B op C
等价于 A op (B op C)
所以你的表达式a? 1 : b ? (4/9) :1
等价于a? 1 : (b ? (4/9) :1 )
a不成立则直接判断b ? (4/9) :1
那么现在b成立了结果是(4/9).
问题来到了为什么4/9等于0.
因为4/9是个整除 整除的话4/9就是0.
你想得到正确结果 你试试4/9.0,进行浮点数运算。
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答1.9k 阅读
2 回答778 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
转换成float再计算除法,比如
4.0 / 9