2012-10-02 34 views
-1

我正在构建一个android应用程序。在我的应用程序中,我需要能够收集一个双倍数(例如42.42),并且还可以获得多少我添加到原始数字为了四舍五入。我目前的代码不工作,并且它的输出0 ..无论如何解决这个问题?Java/Android - 四舍五入方程

我当前的代码:

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

在我的代码“四舍五入”的变量是simpel舍入,而“TOADD”应该是多少我添加到它。出于某种原因,toadd总是会返回0.任何帮助?

+3

为什么你只是不使用BigDecimal和正确的路由,然后只是减去获得差异。 –

回答

1
float toadd = (noDecimal/100); 

这会给你0,因为你是一个较大的小除以整数..

尝试做这样的: -

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

而且,你也不需要做类型转换两次在下面的代码: -

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

只是,外铸件足够: -

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

编辑: -此外,您可能需要使用BigDecimal对于这类问题..

+0

如果你在分区之前强制类型化为'float'或'double'*,那么类型转换就可以工作,而不是之后。 – bdares

+0

关于你在说什么? –

+0

如果您尝试运行您的建议代码,特别是'Float.valueOf(noDecimal/100)',您会发现该值为0.0,而不是所需的值。 – bdares

2

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

刚得到数模1(%1),然后获取原始数的上限?

为了完整起见,你可以简单地改变最后一行保持逻辑的其余部分:

float toadd = noDecimal/100.0; 

这改变了除数为float和intfloat划分产生的浮动。

1

也许我错过了一些事情,或者没有得到你的意图,但是如果你只是想知道你添加了什么,为什么不使用差异?

float rounded = FloatMath.ceil(val); 

float toadd = rounded-val; 

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

+1

@Sebastian_H ..这可能不会给出准确的结果。 –

+0

@RohitJain对。但是,因为他只考虑小数点后的前两位数字,所以我认为这对他的目的来说足够准确。但是按照提议使用'BigDecimal'无论如何都要好得多。 –

+0

@ Sebastian_H ..是的,没有看到OP需要小数点后两位数。 –