Java 二次规划的舍入问题

Java 二次规划的舍入问题,java,Java,在我正在练习的一个问题中,目标是写出二次表达式,然后将其四舍五入到第千位。以下是所需的输出: 1(a变量)6(b变量)3(c变量) 4(a变量)10(b变量)6.1(c变量) 输出: -0.551,-5.449(回答顶行) -1.056,-1.444(底线答案) 问题不在于如何解决问题,而在于我得到的答案。计算二次方程时,如下所示: double a = scan.nextDouble(); double b = scan.nextDouble(); do

在我正在练习的一个问题中,目标是写出二次表达式,然后将其四舍五入到第千位。以下是所需的输出:

1(a变量)6(b变量)3(c变量)

4(a变量)10(b变量)6.1(c变量)

输出: -0.551,-5.449(回答顶行)

-1.056,-1.444(底线答案)

问题不在于如何解决问题,而在于我得到的答案。计算二次方程时,如下所示:

      double a = scan.nextDouble(); 
      double b = scan.nextDouble(); 
      double c = scan.nextDouble(); 

      //equation is correct
      double answer1 = 0.001 * Math.floor((-b + Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a)* 1000.0) ;
      double answer2 = 0.001 * Math.floor((-b - Math.sqrt(Math.pow(b, 2) - (4 * a * c))) / (2 * a) * 1000.0);
我得到的答案是正确的,除了当我开始四舍五入到第千位时,有些数字是正确的,有些则不是,尽管看起来它们是正确的四舍五入,只是没有根据问题

我的输出: -0.551, -5.45 -1.057,-1.444

这和我现在的处境有关吗?如果您能帮助理解此取整问题,我们将不胜感激:)

如何绕行

要获取字符串,请执行以下操作:

String.format("%.2f", 1.2399) // returns "1.24"
String.format("%.3f", 1.2399) // returns "1.240"
String.format("%.2f", 1.2) // returns "1.20"
要打印到标准输出(或任何打印流):

如果不需要尾随的零:

new DecimalFormat("0.00").format(1.2)// returns "1.20"
new DecimalFormat("0.##").format(1.2)// returns "1.2"
如果需要特定的舍入模式:

new BigDecimal("1.25").setScale(1, RoundingMode.HALF_EVEN); // returns 1.2

如果您确实需要对实际数字进行四舍五入,而不仅仅是打印输出:

  double result = Math.round(value * scale) / scale;
其中,
scale
可以固定为
1000
三个小数位,或者计算任意小数位:

  int scale = (int) Math.pow(10, precision);

如何绕行

要获取字符串,请执行以下操作:

String.format("%.2f", 1.2399) // returns "1.24"
String.format("%.3f", 1.2399) // returns "1.240"
String.format("%.2f", 1.2) // returns "1.20"
要打印到标准输出(或任何打印流):

如果不需要尾随的零:

new DecimalFormat("0.00").format(1.2)// returns "1.20"
new DecimalFormat("0.##").format(1.2)// returns "1.2"
如果需要特定的舍入模式:

new BigDecimal("1.25").setScale(1, RoundingMode.HALF_EVEN); // returns 1.2

如果您确实需要对实际数字进行四舍五入,而不仅仅是打印输出:

  double result = Math.round(value * scale) / scale;
其中,
scale
可以固定为
1000
三个小数位,或者计算任意小数位:

  int scale = (int) Math.pow(10, precision);

“当我开始四舍五入”是什么让你认为这是四舍五入?当我开始四舍五入时,你怎么会认为这是四舍五入呢?将是进行舍入的方法。如何舍入:使用
Math.Round()
,而不是
Math.floor()
,这可能也会有帮助。:-)但是,当人们谈论对浮点数进行舍入时,实际上是指对输出、打印结果进行舍入。如何舍入:使用
Math.Round()
,而不是
Math.floor()
,这可能也有帮助。:-)但是,当人们谈论对浮点数进行四舍五入时,实际上是指对输出、打印结果进行四舍五入。