是否是计算小数百分比的正确数据类型的两倍?

时间:2016-12-23 16:25:32

标签: java android floating-point

我想计算项目中的百分比,我正在使用双倍。建议我使用正确的数据类型来计算十进制的百分比,如5.368的18%应该给出0.966精确。

我希望将结果截断为3位小数。

我正在使用它:

EditText kundan = (EditText) findViewById(R.id.kundan);
double kundangiven = Double.parseDouble(kundan.getText().toString());
EditText loss = (EditText)findViewById(R.id.losspercentage);
double lossinkundan = Double.parseDouble(loss.getText().toString());
losspercent  = (lossinkundan * kundangiven) / 100 ;
losspercent = losspercent % 10 ;
displayTotalloss(losspercent);

2 个答案:

答案 0 :(得分:3)

您的原始代码适用于在双打中存储百分比计算。关于将结果格式化为3位小数,请使用String.format(),例如

String.format("%.3f", losspercent);

答案 1 :(得分:2)

现在我更了解您的需求,这是获得double到3位精度的方法,以便显示:

String.format("%.3f", losspercent);

返回String,因此可以从函数返回,直接传递给显示函数,或存储在String

类型的变量中

听起来您在询问是否使用正确的数据类型来存储计算的百分比,或者是否有更好的选择。

鉴于您目前的代码结构,我会说是的,double是正确的选择。无论何时划分(或相乘)非整数,很有可能精确结果要求输出的精度高于输入。在这里使用double代替float的内存成本可能可以忽略不计,因此double似乎是明显的选择。

如果你真的非常关心准确性,那么你可以使用BigDecimalBigDecimal虽然不是原始的,但是在内存和处理方面会花费更多(尽管在这个例子中可能仍然不太明显)。

当然,如果你真的想使用"对"数据类型,并且您可以控制代码库,您可以创建自己的数据类型。我认为这里没有必要。 double非常合适。如果您担心可读性,可以考虑创建一个采用double xint p的函数,并返回一个代表p x%的双精度函数。