【问题标题】:Android/Java - Multiplying by a fraction seems to be different that multiplying with its decimal equivalent? [duplicate]Android/Java - 乘以分数似乎与乘以十进制等效项不同? [复制]
【发布时间】:2015-12-03 13:07:30
【问题描述】:

我正在开发一个可缩放用户输入的 Android 应用程序,因此我可以使用刻度盘直观地表示输入来自特定比例的位置。

我遇到了一些有趣的事情。我所做的是我将用户输入乘以 6/5,得出表盘需要对应用户输入的角度。然而,我得到的角度似乎有问题,所以我决定记录这些陈述:

Log.e("", "current speed = " + currentSpeed);
Log.e("", "raw results = " + ((6/5)*(currentSpeed)));

发生的事情是 currentSpeed 似乎被乘以 1。然后我尝试使用 6/5 的十进制形式,即 1.2,然后我得到了我想要的结果。

一开始,我以为 Android 将我的 6/5 因子四舍五入为 1,因为我没有将它声明为 double,所以我接下来尝试的是:

double factor = 6/5;

然后我在我的方程式中使用了它。但是,我的因素似乎仍然是 1 而不是 1.2。

我的问题是:为什么 Android 似乎不能很好地处理分数运算?通常我不会有问题,因为 6/5 方便地转换为 1.2。但是,在分数不能很好地转换为小数的情况下,我们就会遇到准确性问题。在 Android 中进行数学运算时,有没有办法可靠地使用分数?

【问题讨论】:

  • 在整数数学中,6/5 = 1。
  • 您需要使用小数。 6.0/5.0 - 这不是 android 处理数学的方式,它是 java。
  • @ColinGillespie 6.0/5.0 工作。这似乎有点违反直觉,但它确实有效。谢谢!
  • 老实说,只需使用 BigDecimal 即可。

标签: java android


【解决方案1】:

java如何管理除法(伪代码):

if ( is_int( numerator ) && is_int( denominator ) ) :
    d = int( numerator / denominator )
else :
    d = float( numerator / denominator )

因此在 java 中 6/5 == 1。

因此,将分母转换为浮点数或双精度数,然后除。

另外,请记住检查分母不为 0(以防万一)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多