编写一个程序,实现如下功能:
输入一串字符串,字符串由很多数字(包括浮点数)以及加号组成,计算字符串中的数字的总和,并保留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、验证输出: