【发布时间】: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 即可。