private final static int L1_MAX_SCORE = 30;
private final static int L2_MAX_SCORE = 150;
public void UpdateLevel(int score) {
double progress;
//returns 0.0
progress = score/(L2_MAX_SCORE - L1_MAX_SCORE) * 100;
//works correctly.
progress = (double) score/(L2_MAX_SCORE - L1_MAX_SCORE) * 100;
回答
Java中操作数全部为int
s的算术运算将导致int
s,所以您实际上将整数结果分配给双变量。因此,由于更高的精确度,您必须至少将其中的一个施加到双精度上,以便基于双精度执行计算。
将整数与整数相除将定义为进行整数除法,就像在大多数(所有?)其他C类语言中一样。
通过将score
转换为double值,您将浮点值与整数相除,然后您将返回浮点值。
L2_MAX_SCORE - L1_MAX_SCORE
= 150 - 30 = 120
假设分数是30
使用浮点数,答案应该是30/120 = 0.4 随着整数除法,这将让四舍五入为0,因此为什么它不工作“ - 它实际上是工作,但这样做的错误类型划分为您的需求
您可以
- A)铸或者分子或分母为双
- b)中重新排列 式是
(score * 100)/(L2_MAX_SCORE - L1_MAX_SCORE)
- 与此,它会成为(30 * 100)/ 120 = 3000/120 = 40
- 它仍然的确整数除法,因此,如果比分是31你的答案(3100 /120)不25.8333但25
即使答案大于1,双对象仍然会被赋值为0而没有强制转换。 – user432209 2010-10-15 23:48:07
你用什么价值评分? 'UpdateLevel(110)'应该导致0.0;而'UpdateLevel(120)'将是100.0 – Alok 2010-10-16 00:01:21
- 1. 为什么我必须声明var = Class.new?
- 2. 我必须打开什么VS扩展/设置才能使用此功能?
- 3. 为什么我明确地必须在这里声明函数?
- 4. 我必须查询两次以获得此结果吗?
- 5. 为什么我必须双击才能激活jquery功能?
- 6. 为什么我必须添加System.Data.Entity才能使用System.Data.Objects?
- 7. 为什么我必须使用DISTINCT才能正常工作?
- 8. 为什么我必须总结才能找到重复的号码?
- 9. 为什么jsp中的EL函数必须声明为静态?
- 10. 需要修改什么才能在此C代码中获得所需结果
- 11. 为什么我必须声明一个不相关的struct file_handle变量才能使用该类型?
- 12. 必须加载memcache扩展才能使用此后端
- 13. 为什么我用@Override获得“必须重写超类方法”?
- 14. 为什么原型必须在构造函数之外声明?
- 15. 必须声明标量变量,为什么当它的Param?
- 16. 为什么EXEC会报错必须声明标量变量
- 17. 我是否总是必须在angular2中声明一个变量才能获得更改?
- 18. 获得一个结果从LINQ声明
- 19. 我必须改变什么才能用Nios2启动Linux 4.9?
- 20. 为什么我不能声明NSFetchResultsController?
- 21. 为什么我必须滚动才能刷新我的列表视图?
- 22. 为什么我必须重复输入才能让我继续前进?
- 23. 为什么next_post_link必须调用两次才能正常工作?
- 24. 为什么RegEx必须用括号括起来才能匹配?
- 25. 为什么MySQLdb for Mac必须安装MySQL才能安装?
- 26. 为什么我必须将整数转换为float64才能匹配?
- 27. 错误:必须声明@newsSummary
- 28. ASP.NET C#必须声明
- 29. 计划 - 我试图扩展此声明有什么问题?
- 30. 类必须声明为抽象或?
我觉得奇怪的是定义变量(进度)为双不自动启动这种行为。 – user432209 2010-10-15 23:35:15
Java在将它分配给变量之前首先评估右侧的表达式,所以我相信在考虑数据类型的情况下,如果不执行转换,结果已经是int。 – BoltClock 2010-10-15 23:43:06
为什么double的类型会影响计算?将int存储为double是有效的,并且除法int和期望int是有效的。所以'双重进展= 3/4;进度== 0'是完全合法的陈述。如果它自动将3/4设置为浮点除法,那么如何更改语法以便现在可以执行它的操作? – Falmarri 2010-10-15 23:44:50