【问题标题】:How to prevent number being rounded to 0, Android Studio [duplicate]如何防止数字被四舍五入为0,Android Studio [重复]
【发布时间】:2017-01-26 17:57:20
【问题描述】:
    public int total;
    public int likes;
    public double average;

    total = 5;
    likes = 21;

    average = likes / total;

    Log.d("Average", average);

嗨,average = likes / total should 返回 4.2,但是,它正在运行 4.0。我怎样才能将其保留为 4.2 而不是 4.0?

【问题讨论】:

  • 将其中一个变量转换为双精度数,否则会向下舍入,因为整数是四舍五入的。
  • 你的意思是改变总数还是喜欢加倍?如果是这样,我已经尝试过了,它仍然返回 4.0
  • average = (double)likes / total;

标签: java android android-studio average formula


【解决方案1】:

仅使用整数的计算会导致最终结果为整数,即使稍后您将其分配给浮点值,例如 double。整数除法的工作原理是计算分母完全适合分子的次数。

要解决此问题,您必须在除法中至少转换 2 个操作数中的一个,以便已经以双精度执行除法(算术运算中的数字会自动转换为允许比其操作数更高的精度,如果至少有一个操作数具有该精度):

average = (double)likes / total;

average = likes / (double) total;

请注意,这与average = (double) (likes / total); 不同,后者将在已舍入后转换结果。

【讨论】:

  • 感谢(双)空格的提示:(我犯了那个错误
  • 可以用浮点数做到这一点吗?还是应该将双精度转换为浮点数,因为我刚刚发现我需要将数字设为浮点数
  • float 也可以,是的。
  • 你能告诉我吗?我试过这样做(浮动)而不是(双),但它用红色下划线
  • 我想得到 4.2 的值,但是如果我将 double 转换为 float 它会向上取整,它会给出 5
【解决方案2】:
average = (double)likes / total;

【讨论】:

  • 赞成简短,但我担心有人会认为这是一个神奇的常数。
  • 哈哈,对@DarioOO。感谢您的投票!
  • 欢迎 :) @JoshJoe
  • AntonH 首先回答了它,所以我不得不接受他的 :) 我确实投票支持你,但因为我未满 15 岁,所以不会显示
  • @JoshJoe 我先回答了 :) 反正不用担心!!
猜你喜欢
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多