如何获得实际平均值,而不是四舍五入?
Posted
技术标签:
【中文标题】如何获得实际平均值,而不是四舍五入?【英文标题】:How to get the actual average, not rounded? 【发布时间】:2020-12-27 05:27:46 【问题描述】:这就是我所拥有的(更改了此问题的打印消息),当我执行 4 和 11 时,你应该得到 7.5,但它只给我 7。我该如何解决这个问题?
import java.util.Scanner;
class U1_L6_Average_Finder
public static void main(String[] args)
Scanner scan = new Scanner(System.in);
int a;
int b;
System.out.println("put in 4");
a = scan.nextInt();
System.out.println("Put in 11");
b = scan.nextInt();
System.out.println("Here is your average");
System.out.print((a + b) / 2);
【问题讨论】:
使用 double 或 float 代替 int。System.out.print( (double)(a + b) /2 );
您还可以通过将2
(分母)更改为2.0
、2f
、2.0f
,将商强制转换为浮点值。如果你想要双精度,你可以使用d
而不是f
。
我怎样才能改变它,以便只有一个输入,比如双输入而不是两个单独的输入
【参考方案1】:
您可以通过将2
(分母)更改为2.0
、2f
、2.0f
,将商强制转换为浮点值。如果你想要双精度,你可以使用d
而不是f
。
public class AverageFloatingPointCoercionExample
public static void main(String[] args)
Scanner scan = new Scanner(System.in);
int a, b;
System.out.print("Enter value #1 (4): ");
a = scan.nextInt();
System.out.print("Enter value #2 (11): ");
b = scan.nextInt();
System.out.print("Here is your average: ");
System.out.print((a + b) / 2.0f); // 7.5
或者,您可以显式转换分子。
System.out.print(((float) (a + b)) / 2);
【讨论】:
【参考方案2】:您使用的是整数 (int a, b;
),因此它会对您的结果进行四舍五入。
使用double
或float
代替它来获得您想要的,例如:
double a, b;
但是,如果您不想修改变量的类型,您可以使用f
(例如)编辑您的最后一个System.out.print
,这会将您的值转换为float
,例如:
System.out.print((a + b) / 2.0f);
选中此项以了解有关变量的更多信息: Java Variables
【讨论】:
【参考方案3】: 您已确定输入/平均。所以这是缺少的部分。 只输出r... 但是如果你想要一定的小数位数(这里是 5 个)... 我这样做是为了以防您想要平均超过 2 个项目...import java.text.DecimalFormat;
class Playground
public static void main(String[ ] args)
int i = 5;
int j = 17;
double r = (double)i/j;
DecimalFormat df = new DecimalFormat("#.#####");
System.out.println(r);
System.out.println(df.format(r));
输出:
0.29411764705882354
0.29412
【讨论】:
【参考方案4】:您正在使用整数除法。整数除法将导致整数作为答案。您必须将其中一个值更改为加倍。
例子:
System.out.println((double)(a+b)/2);
或
System.out.println((a+b)/2.0));
【讨论】:
以上是关于如何获得实际平均值,而不是四舍五入?的主要内容,如果未能解决你的问题,请参考以下文章