-1

我正在构建一个安卓应用程序。在我的应用程序中,我需要能够舍入一个双精度数(例如 42.42),并且还需要得到我在原始数字上加了多少才能将其舍入。我当前的代码不起作用,它输出 0.. 无论如何要解决这个问题?

我当前的代码:

                float rounded = FloatMath.ceil(val);
                double getDecimal = (val - FloatMath.floor(val))*100;
                int noDecimal = (int) ((int) 100-getDecimal);
                float toadd = (noDecimal/100);

在我的代码中,“rounded”变量是简单的舍入,“toadd”应该是我添加了多少。出于某种原因,toadd 总是返回为 0。有什么帮助吗?

4

3 回答 3

2

noDecimal除以100。两者都是整数,结果将始终是整数。在这种情况下,它是一个介于 0 和 1 之间的 int,它将始终被截断为 0。

仅获取数字模 1 ( %1),然后获取原始数字的上限有什么问题?

为了完整起见,您可以简单地更改最后一行以保留其余逻辑:

float toadd = noDecimal/100.0;

这会将除数更改为浮点数,并且int除以 a会float产生浮点数。

于 2012-10-02T11:55:17.433 回答
1
float toadd = (noDecimal/100);

这将为您提供 0,因为您将较小的整数除以较大的整数..

尝试这样做: -

float toadd = (Float.valueOf(noDecimal)/100);

此外,您不需要在以下代码中进行两次类型转换:-

int noDecimal = (int) ((int) 100-getDecimal);

只是,外部演员就足够了:-

int noDecimal = (int) (100-getDecimal);

编辑:-另外,您可能希望使用BigDecimal来解决此类问题。

于 2012-10-02T11:55:00.677 回答
1

也许我遗漏了一些东西或者没有让你的意图正确,但如果你只是想知道你添加了什么,为什么不直接使用差异呢?

float rounded = FloatMath.ceil(val);

float toadd = rounded-val;

编辑:正如评论中提到的,这可能并不总是给出绝对准确的结果。但它是可以与 一起使用的一般概念BigDecimal,它提供了更高的精度。

于 2012-10-02T12:00:50.457 回答