我正在努力创建一个计算器,但在数字后面显示小数部分有一些问题。我在计算器上有键是1,2,3,4,5,6,7,8,9,0,00和一个退格键。
按下1将显示0.01
然后onPressing 2 o / p 0.12
然后onPressing 3 o / p 1.23
就像我们将添加在屏幕上显示数字一样。以下是我用来执行此任务的代码
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.number1:
calcValue(.01);
break;
case R.id.number2:
calcValue(.02);
break;
case R.id.number3:
calcValue(.03);
break;
case R.id.number4:
calcValue(.04);
break;
case R.id.number5:
calcValue(.05);
break;
case R.id.number6:
calcValue(.06);
break;
case R.id.number7:
calcValue(.07);
break;
case R.id.number8:
calcValue(.08);
break;
case R.id.number9:
calcValue(.09);
break;
case R.id.number0:
enteredAmt = enteredAmt * 10.0 +(.0 * 100)/ 100.0;
roundEnteredPrice();
roundMyData(enteredAmt,2);
System.out.println("enteredAmt before:"+enteredAmt);
enteredAmt = (enteredAmt*100.0)/100.0;
System.out.println("enteredAmt after:"+enteredAmt);
valueEnteredTextview.setText(""+enteredAmt);
break;
case R.id.number00:
enteredAmt = enteredAmt * 100.0 + Math.floor(.0 * 100)/ 100.0;
roundEnteredPrice();
roundMyData(enteredAmt,2);
System.out.println("enteredAmt before:"+enteredAmt);
enteredAmt = (enteredAmt*100.0)/100.0;
System.out.println("enteredAmt after:"+enteredAmt);
valueEnteredTextview.setText(""+enteredAmt);
break;
case R.id.backspaceButton:
enteredAmt = 0.00;
valueEnteredTextview.setText("$" +0.00);
break;
}
private void calcValue(double d) {
enteredAmt = enteredAmt + Math.floor(d * 100)/ 100.0;
System.out.println("enteredAmt befor:"+enteredAmt);
enteredAmt = (Math.floor(enteredAmt*100.0)/100.0);
System.out.println("enteredAmt after:"+enteredAmt);
valueEnteredTextview.setText(""+enteredAmt);
}
private void roundEnteredPrice() {
BigDecimal bd = new BigDecimal(enteredAmt);
BigDecimal res = bd.setScale(2, RoundingMode.FLOOR);
System.out.println("Big Decimal" + res.toPlainString());
double entered = Double.parseDouble(res.toPlainString());
System.out.println("Entered Amount: "+entered);
}
private void roundMyData(double enteredAmt2, int numberOfDigitsAfterDecimal) {
double p = (float)Math.pow(10,numberOfDigitsAfterDecimal);
enteredAmt2 = enteredAmt2 * p;
double tmp = Math.floor(enteredAmt2)/p;
System.out.println("~~~~~~tmp~~~~~"+tmp);
现在我的问题是它没有显示最后输入的零 就像我输入1,2,0 预期值显示为1.20 但显示1.2 如果我按下一个数字然后它显示零,就像我按4然后输出是12.04
我尝试使用Big Decimal也给了我零但是证明了一些有线结果有时就像我输入1,0,2,0期望值是10.20但它给出的值为10.19。 建议我做点什么,我做错了。
答案 0 :(得分:2)
使用String.Format
String value = String.format(Locale.ENGLISH, "%.2f", yourValue);
答案 1 :(得分:1)
您需要使用DecimalFormat根据需要对其进行格式化:
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.00");
System.out.print(df.format(d));
答案 2 :(得分:1)
使用格式化程序格式化十进制值
DecimalFormat df = new DecimalFormat("#.0");