为什么我在Java中的计算错误?
我用这个代码来计算一些东西,但几乎在每种情况下结果都是0.0。 为什么? 编译器中没有警告或错误。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try { int potsum = Integer.valueOf(jTextField1.getText()); int bla = Integer.valueOf(jTextField2.getText()); float result = ((Integer.valueOf(bla)/Integer.valueOf(potsum)) * 100); jLabel3.setText(Float.toString(result)); } catch (NumberFormatException e) { System.out.println("Error!"); } }
这是因为这是整数除法的整数。 在分割之前将它们都放在浮动状态,你应该得到正确的结果。
float result = ((Integer.valueOf(bla)/Integer.valueOf(potsum)) * 100);
正在进行整数除法,它将值置于最低值(1/2 => 0,2 / 3 => 0,3 / 3 => 1)。
考虑类型转换或使除法的分子/分母成为浮点值。
float result = Integer.valueOf(bla) * 100.0f / Integer.valueOf(potsum);
要么
float result = (float)Integer.valueOf(bla) / Integer.valueOf(potsum) * 100.0f;
要么
float result = Integer.valueOf(bla) / (float)Integer.valueOf(potsum) * 100.0f;
我将补充一点,我经常看到人们将分区作为表达式中的最后一个运算符,主要是因为它澄清了意图并且不要求人们理解操作顺序+评估是如何从左到右。
您需要转换为float,否则它看起来像Java的整数算术。
float result = bla * 100f/ potsum;
请注意百分比的正确计算。
float result = ((Float.valueOf(bla)/Float.valueOf(potsum)) * 100);
- 在java中实现equals方法
- GridView.LayoutParams在不同的屏幕尺寸中是相同的,是否可能?
- 在java中有任何函数,其行为类似于来自c的getopt
- 如何将带有recyclelerview的一个活动中的json资产文件中的arraylist收集的数据传递给另一个具有回收者视图的活动?
- 无法在后台的while循环中发布异步任务的进度 – Android
- 获取“main”java.lang.UnsupportedOperationException
- 以编程方式确定AppEngine for Java环境
- 使用Singleton类初始化/访问ArrayList
- 如何在Android项目中使用JavaFX活动? (Kokos样本项目)