Java四舍五入到特定的小数位
我正在尝试编写一个java程序,它将舍入到小数点后一位。例如,如果我的总数为32.45678,则应为32.4568,如果为0,则应为0.0。这是我到目前为止所拥有的。谢谢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
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;