下面的是一个银行管理系统,我要解决的问题是小数点后面保留2位。代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import java.text.NumberFormat;public class Bank {
Scanner sc = new Scanner(System.in); /*
 * static BufferedReader br = new BufferedReader(new
 * InputStreamReader(System.in));
 */
private static String name; private static String password; private static double leftmoney; private static double takemoney; private static double savemoney; private int flag = 0; String saveDate;// 定义存款时间变量 String takeDate;// 定义取款时间变量 String choose;// 定义选择菜单的变量 ArrayList saveTime = new ArrayList();// 定义动态数组用来存储存款时间 ArrayList takeTime = new ArrayList();// 定义动态数组用来存储取款时间 ArrayList save_Money = new ArrayList();// 定义动态数组用来存储取款数目 ArrayList take_Money = new ArrayList();// 定义动态数组用来存储取款数目 public Bank(String name, String password, double leftmoney) {
this.name = name;
this.password = password;
this.leftmoney = leftmoney;
} public void login() {
int i = 3;
while (true) {
System.out.print("请输入用户名:");
name = sc.nextLine();
System.out.print("请输入密码:");
password = sc.nextLine();
if (name.equals("admin") && password.equals("admin")) {
System.out.flush();
System.out.println("成功登陆!");
System.out.println("余额:" + leftmoney + "元");
break;
} else {
i--;
if (i == 0) {
System.out.println("输入超过最大次数!程序退出");
System.exit(0);
}
System.out.println("对不起,您输入的用户名或密码错误,请重新输入:");
}
} } public Bank() {
// String choose = null;
while (true) {
System.out.println("请选择您要进行的操作:1.存款 2.取款 3.查询 4.退出");
choose = sc.nextLine();// 读取字符 if (choose.compareTo("1") == 0) {
while (true) {
System.out.println("请输入你要存储的金额:");
try{
savemoney = Double.parseDouble(sc.nextLine());
 DecimalFormat nf = new DecimalFormat("#,##0.##");
String s = nf.format(savemoney);
if(savemoney<=0){
System.out.println("输入错误,请重新输入!");
continue;
}
}catch(NumberFormatException e){
System.out.println("格式错误,请重新输入");
}

leftmoney += savemoney;
// saveDate = new Date();
saveDate = getTime();
saveTime.add(saveDate);
save_Money.add(savemoney);
System.out.println("存款成功!已存入" + savemoney + "元." + "你的可用余额为"
+ leftmoney + "元");
break;
}
}
// 取款
else if (choose.equals("2")) {
while (true) {
System.out.println("请输入你要取款的金额:");
try {
takemoney = Double.parseDouble(sc.nextLine());
} catch (NumberFormatException e) {
System.out.println("输入错误,请重新输入");
continue;
}
if (!(leftmoney < takemoney)) {
leftmoney -= takemoney;// 余额减少
System.out.println("取款成功!已取出" + takemoney + "元."
+ "你的余额为" + leftmoney + "元");
// takeDate = new Date();
takeDate = getTime();
takeTime.add(takeDate);
take_Money.add(takemoney);
flag++;
break;
} else {
System.out.println("余额不足,请重新输入:");
}
continue;
}
} // 输入3为查询
else if (choose.compareTo("3") == 0) {
System.out.println("你的余额为" + leftmoney + "元;");
if (flag == 0)
System.out.println("您没有取款纪录!");
else
for (int i = 0; i < saveTime.size(); i++) { 
System.out.println("您在" + saveTime.get(i) + "存入"
+ save_Money.get(i) + "元");
System.out.println("您在" + takeTime.get(i) + "取出"
+ take_Money.get(i) + "元");
}


continue;
}
//  输入4为退出
else if (choose.equals("4")) {
System.out.println("程序退出");
System.exit(0);
}
//  输入其它的就为不合法,返回重新输入
else {
System.out.println("输入无效!请输入合法的");
continue;
}
}
} /**
 * 获得系统当前时间
 */
public String getTime() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
return sdf.format(new Date());// new Date()为获取当前系统时间
} /**
 * 入口函数
 */
public static void main(String[] args) {
Bank b = new Bank(name, password, leftmoney);
b.login();// 调用登陆
new Bank();
}
}

解决方案 »

  1.   

    小数点后面保留2位?建议你用BigDecimal 他的所有的操作都可以指定保留的小数点后的位数,以及保留规则。
      

  2.   


     /**
         * @param args
         */
        public static void main(String args[]) {
            float scale = 89.898f;
            DecimalFormat format = new DecimalFormat("##0.00");
            System.out.println(format.format(scale));
        }
    上面的是可以四舍五入保留两位的方法,程序自己改吧~~
      

  3.   

    结果只保留小数点后两位。对数字进行格式化可以使用下面的两个类:
    java.text.DecimalFormat 
    java.text.NumberFormat
    NumberFormat是抽象类,所有主要使用DecimalFormat完成格式化。通常使用DecimalFormat的构造函数来生成格式,例如:
    NumberFormat nf = new DecimalFormat("0.00");
    表示数字的格式为小数点后保留两位,如果整数部分为0,0不能省略,小数点后即使是0也不能省略。
    10.374           ——〉           10.37
    另外一个符号“#”表示如果一位数字,如果是0,不显示。下面的例子使用了“#”并且整数部分,每3位中间使用“,”隔开。
    NumberFormat nf2 = new DecimalFormat("###,###,###.##");
    下面是两种格式的不同格式结果:
                  NumberFormat nf = new DecimalFormat("0.00");
                  a = Float.parseFloat(nf.format(a));
      

  4.   

    涉及到货币的,必须要用BigDecimal类,用double精度会出问题