java - 简单方程未通过单元测试

标签 java double rounding-error

我有一个方法,它接受 2 个整数作为参数并返回:

 public int method(int a, int b){
   return Math.round((Math.abs(a-b)/3) - (Math.min(a,b)-1500)/10)
 }

我已经创建了单元测试,它通过值 1400 和 1500(预期值为 43),但是对于 1459 和 1500 失败。预期输出是 18,但是我的方法返回 17。 我相信这可能与舍入有关,但是我看不到任何明显的错误。将 17.7(6) 舍入到 18 应该不会有任何问题。

编辑:

真正的函数略有不同(我没有 Math.abs(a-b) 但我因此定义了“diff”变量。我可以向你们保证我将其声明为双 diff;-我不知道为什么它变成 int diff :) 已解决,谢谢:)

最佳答案

Math.absMath.min 在将 int 作为参数传递时都返回 int,因此您的代码正在执行整数除法而不是您期望的双除法。如果您将 310 替换为 3.010.0,您的代码应该按您的预期工作。

关于java - 简单方程未通过单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7379822/

相关文章:

java - 单个泛型参数同时接受两种不同类型

java - 如何使用相同的输入创建两个不同的补充列表

java - float 的格式

java - 如何从 double 数据类型值集中获取最大值?

ios - 为 Collection View 舍入浮点值时出错

java - 在新窗口中查找 xpath 位置,单击后打开。使用 java 和 selenium

java - 线程中的异常 "AWT-EventQueue-0"java.lang.NumberFormatException : For input string: "1 "

java - 解析双数和百万

java - 尝试使用 Math.floor 对数字进行舍入,但它没有在正确的点将它们切断

rounding - 四舍五入标准-财务计算