要求:
小数位2位,多的砍掉,不足补0 。
小数前:每3位加逗号,前面不能有无意义的0。
加符号,正数前面加美元符;负数去掉负号再加美元符,最后用()括起来。不可以欠债0元
我的代码如下(我觉得非常不够精简,但是暂时不知道怎么做)
import java.util.Scanner;
public class Money {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String money = scanner.nextLine();
money = changeDecimal(money);
money = addDou(money);
money = add$(money);
System.out.println(money);
}
}
public static String changeDecimal(String money){
int cut = money.indexOf(".");
String decimal = new String();
if(cut<0){
money = money+".00";
}else{
decimal = money.substring(cut,money.length());
if(decimal.length()-1>2){
money=money.substring(0,cut)+decimal.substring(0,3);
}else if(decimal.length()-1<2){
money = money+"0";
if(money.lastIndexOf(".")==money.length()-2){
money = money+"0";
}
}
}
return money;
}
public static String addDou(String money){
String fuHao = "";
if(money.substring(0,1).equals("-")) /*根据我总是忘了负数的错误,加上负数带来处理上较大的不便,其实应该先把-去掉,最后返回的时候加上*/
{
money = money.substring(1,money.length());
fuHao = "-";
}
String[] moneyArray = money.split("|");
StringBuilder result =new StringBuilder();
int cut = money.indexOf(".");
String decimal = money.substring(cut,money.length());
/*去掉前面的0*/
if(moneyArray[0].equals("0")){/*我的错误4:去掉0这里也要注意分正负*/
while (moneyArray[0].equals("0")&&!moneyArray[1].equals(".")) {
cut--;//每去掉一次0cut就往前移1位,我就是错在这里!注意!砍掉前面的0,往前移之后整体长度也变了
for(int j=0;j<moneyArray.length-1;j++) {
moneyArray[j] = moneyArray[j + 1];
}
}
}
/*加逗号*/
int j=0;
for(int i=cut-1;i>=0;i--){
result.append(moneyArray[i]);
j++;
if(j==3&&i!=0) {//我又错在这里了,这里要分整数和负数
j=0;
result.append(",");
}
}
result.reverse().append(decimal);
return fuHao+result.toString();
}
public static String add$(String money){
/*我的错误3:不可以出现欠债0元,-0要变0*/
if(money.substring(0,2).equals("-0")){
money = money.substring(1,money.length());
}
if(money.substring(0,1).equals("-")){
money = "($"+money.substring(1,money.length())+")";
}else{
money = "$"+money;
}
return money;
}
}
(meituan笔试题)