我想计算项目中的百分比,我正在使用双倍。建议我使用正确的数据类型来计算十进制的百分比,如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);
答案 0 :(得分:3)
您的原始代码适用于在双打中存储百分比计算。关于将结果格式化为3位小数,请使用String.format()
,例如
String.format("%.3f", losspercent);
答案 1 :(得分:2)
现在我更了解您的需求,这是获得double
到3位精度的方法,以便显示:
String.format("%.3f", losspercent);
返回String
,因此可以从函数返回,直接传递给显示函数,或存储在String
听起来您在询问是否使用正确的数据类型来存储计算的百分比,或者是否有更好的选择。
鉴于您目前的代码结构,我会说是的,double
是正确的选择。无论何时划分(或相乘)非整数,很有可能精确结果要求输出的精度高于输入。在这里使用double
代替float
的内存成本可能可以忽略不计,因此double
似乎是明显的选择。
如果你真的非常关心准确性,那么你可以使用BigDecimal
。 BigDecimal
虽然不是原始的,但是在内存和处理方面会花费更多(尽管在这个例子中可能仍然不太明显)。
当然,如果你真的想使用"对"数据类型,并且您可以控制代码库,您可以创建自己的数据类型。我认为这里没有必要。 double
非常合适。如果您担心可读性,可以考虑创建一个采用double x
和int p
的函数,并返回一个代表p
x
%的双精度函数。