[英]Round integers to one decimal place java
我是Java的新手,我想知道有什么方法可以将面积和周长的总值四舍五入到小数点后一位吗? 它一直输出整数,我不想要那样。
package exercises;
import java.util.Scanner;
public class Exercises {
public static void main(String[] args) {
Scanner user_input = new Scanner (System.in);
System.out.println("Enter a value to represent the radius of a circle.");
String radius = user_input.next();
int radiusValue = Integer.parseInt(radius);
int area = (int) (Math.PI * radiusValue * radiusValue);
int circumference = (int) (2 * Math.PI * radiusValue);
System.out.println("The area is: " + area + " and the circumference is: " + circumference);
}
}
DecimalFormat formatter = new DecimalFormat("#.#");
Double area = (Math.PI * radiusValue * radiusValue);
Double circumference = (2 * Math.PI * radiusValue);
area = Double.parseDouble(formatter.format(area));
circumference = Double.parseDouble(formatter.format(formatter));
整数是整数,不允许使用小数。
DecimalFormat是允许您解析和格式化数字的类,“#”表示整数或数字,小数点后的“#”表示答案中需要的小数位数,因此在您的情况下为“#。#” '表示小数点后一位。 要格式化双精度数,您需要使用DecimalFormat中的format方法,但是format方法的结果在String中,因此,如果您需要将它们变成double型,然后再将其用作数字,则需要将其解析回double型。
如前所述,要只存储一个小数位,就必须使用非整数类型(因此float在这里很完美)。 但是,没有人说您必须显示所有可用的小数位-也许这会给您一些提示,如何以更舒适的形式显示结果:
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
您需要根据计算所需的精度将数据类型更改为float
或double
。 查看官方文档, 网址为https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html ,以获取有关可用数据类型的更多信息。
如果您出于演示以外的原因需要四舍五入数字,则可以使用Math.round(arg)
像这样:
Scanner userInput = new Scanner(System.in);
System.out.println("Enter a value to represent the radius of a circle.");
String radius = userInput.next();
float radiusValue = Float.parseFloat(radius);
float area = Math.round(((float) (Math.PI * radiusValue * radiusValue)) * 10F) / 10F;
float circumference = Math.round(((float) (2F * Math.PI * radiusValue)) * 10F) / 10F;
Math.round(arg)
其double
或float
参数四舍五入到最接近的整数,因此,将原始值乘以10,四舍五入然后除以10,就可以将原始数舍入到小数点后一位。
如果您只是需要精确的表示形式,请查看DecimalFormat
类,如对您的问题的另一个答复所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.