如何获得实际平均值,而不是四舍五入?

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.02f2.0f,将商强制转换为浮点值。如果你想要双精度,你可以使用d 而不是f 我怎样才能改变它,以便只有一个输入,比如双输入而不是两个单独的输入 【参考方案1】:

您可以通过将2(分母)更改为2.02f2.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;),因此它会对您的结果进行四舍五入。

使用doublefloat 代替它来获得您想要的,例如: 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));

【讨论】:

以上是关于如何获得实际平均值,而不是四舍五入?的主要内容,如果未能解决你的问题,请参考以下文章

python逻辑回归:返回实际值,而不是1或0

如何获取数组的平均值并对MongoDB中的结果进行四舍五入

如何平均四舍五入到PostgreSQL的2位小数

获得数字除法的准确结果

仅获得小数点后一位[重复]

T-SQL如何保留两位小数而不四舍五入[重复]