編寫一個程序,實現如下功能:
輸入一串字符串,字符串由很多數字(包括浮點數)以及加號組成,計算字符串中的數字的總和,並保留2位有效數字
要求:
實現一次運行,可計算多個運算式子,輸入 q 時 運行結束
eg:
輸入:12.23+23.22+10.5
輸出:45.95
1、構建保留小數位數的一個函數:
/**
* 按指定舍入模式保留指定小數位數
* @param d 格式化前的小數
* @param newScale 保留小數位數
* @param roundingMode 舍入模式
* (RoundingMode.UP始終進一/DOWN直接捨棄/
* CEILING正進負舍/FLOOR正舍負進/
* HALF_UP四捨五入/HALF_DOWN五舍六進/
* HALF_EVEN銀行家舍入法/UNNECESSARY拋出異常)
* @return 格式化後的小數
*/
public static double formatDecimal(double d, int newScale, RoundingMode roundingMode) {
BigDecimal bd = new BigDecimal(d).setScale(newScale, roundingMode);
return bd.doubleValue();
}
2、功能實現:
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;
public class Account {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner get=new Scanner(System.in);
while(true) {
String sc=get.next();
if(sc.equals("q")) {
break;
}
account(sc);
}
get.close();
}
public static void account(String str) {//邏輯實現
double sum=0;
String s="";
int index1=0, index2=0;
for(int i=0;i<str.length();i++) {
if(str.charAt(i)=='+') {
index2=i;
s=str.substring(index1, index2);//截取從index1到index2位置的字符串
sum+=Double.valueOf(s);
index1=index2;
}
}
sum+=Double.valueOf(str.substring(index1, str.length()));
sum=format_decimal(sum);
System.out.println("總和爲: "+sum);
}
public static double format_decimal(double d) {//保留小數位數
BigDecimal bd=new BigDecimal(d).setScale(2, RoundingMode.DOWN);
return bd.doubleValue();
}
}
3、驗證輸出: