Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java四舍五入到特定的小数位_Java - Fatal编程技术网

Java四舍五入到特定的小数位

Java四舍五入到特定的小数位,java,Java,我正在尝试编写一个java程序,它将舍入到小数点后一位。例如,如果我的总数为32.45678,则应为32.4568,如果为0,则应为0.0。这是我到目前为止所拥有的。谢谢 import java.text.DecimalFormat; import java.util.Scanner; public class product{ public static void main(String[] args) { Scanner scan = new Scanner(System.in

我正在尝试编写一个java程序,它将舍入到小数点后一位。例如,如果我的总数为32.45678,则应为32.4568,如果为0,则应为0.0。这是我到目前为止所拥有的。谢谢

import java.text.DecimalFormat;
import java.util.Scanner;
public class product{

  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the first number:");

    float f1 = scan.nextFloat();
    System.out.println("Enter the second number:");

    float f2 = scan.nextFloat();
    float p = f1*f2;

    DecimalFormat df = new DecimalFormat(".####");
    System.out.println("Product: "+df.format(p));

  }

} 

文本输入的数字32.456或32.45643234可能成为浮点32.456000004或32.456432。因为浮点和双精度只是近似值

可以使用BigDecimal,因为新的BigDecimal32.456将具有3的精度刻度。我认为这是最令人满意的解决方案。因此,将标记作为字符串读取

可以读取字符串,确定其精度,执行Float.parseFloat并将其格式化为所需的递减精度。需要为该精度制作输出格式

String s1 = scan.next();
BigDecimal f1 = new BigDecimal(s1);
int scale = f1.scale(); // 25E3 == 25000 with scale -3.
if (scale < 1) {
    scale = 1;
} else {
    --scale;
}
f1 = f1.setScale(scale, BigDecimal.ROUND_HALF_UP);

如果它得到0,它不会将其格式化为0.0,那么我的代码中是否缺少某些内容?如果n==0{return 0.0;},那么您就完成了。问题是什么?当我有59.73243*243.434=14540.9044时,它仍然无法正确格式化,它无法格式化为14540.904。这是我的最后一期你为什么期望14540.904?是不是应该是14540.9044?还有什么建议吗?@5ktm5取决于你的需要,BigDecimal有点笨拙,但擅长金融软件等。添加了“自己动手”舍入,可以是任何浮点值,也可以是字符串作为输入。
Maybe you wanted just to round a bit more. (Doubting the last digit?)

float f1 = ...;
String s = Float.toString(f1);
if (s.contains("E")) {
    throw new IllegalStateException();
}
if (s.contains(".")) {
   s += ".0";
} else {
   char c = s.charAt(s.length() - 1);
   if (c >= '5') {
       char d = s.charAt(s.length() - 2);
       s = s.substring(0, s.length() - 2) + ((char) (d + 1));
   } else {
       s = s.substring(0, s.length() - 1);
   }
}
return s;