public static void main(String[] args) {
String s1 = "0.21";
System.out.println(Double.valueOf(s1));
String s2 = "0.02";
System.out.println(Double.valueOf(s2));
System.out.println(0.21 + 0.02);
double sum = Double.valueOf(s1) + Double.valueOf(s2);
double d1 = 0.21;
double d2 = 0.02;
double sum2 = d1 + d2;
System.out.println(sum);
System.out.println(sum2);
}
首先我把2个字符串s1和s2以小数点分割,分成整数部分和小数部分,如果没有小数点直接求和运算就能得到结果所以不考虑这个情况,接下来,我把分成整数和小数部分我都当成整数求和,那么就只要判断小数相加后有没进位就可,一般相加进位只有1,最后把整数和小数部分一拼接就好了,输出的字符串就是结果了,你可以把这个String类型以任意你想要的int,double等类型返回也是可以的。
public static void test() {
String s1 = "0.99";
String s2 = "0.886";
String[] shuZi1 = null, shuZi2 = null;
int num1 = 0, num10 = 0, num2 = 0, num20 = 0;
int shuZi1xiaoShuChangDu = 0, shuZi2xiaoShuChangDu = 0;
Integer xiaoShuHe = 0, numHe = 0;
double zongHe = 0.0;
String jinWei = "0";
//判断s1,s2是否有小数位
if (s1.indexOf(".") != -1) {
shuZi1 = s1.split("\\.");
num1 = Integer.valueOf(shuZi1[0]);
num10 = Integer.valueOf(shuZi1[1]);
} else {
num1 = Integer.valueOf(s1);
}
if (s2.indexOf(".") != -1) {
shuZi2 = s2.split("\\.");
num2 = Integer.valueOf(shuZi2[0]);
num20 = Integer.valueOf(shuZi2[1]);
} else {
num2 = Integer.valueOf(s2);
}
//计算小数位,短的数要乘上对应的10才可和长的数同级相加
if (num10 != 0 && num20 != 0) {
if (shuZi1[1].length() > shuZi2[1].length()) {
shuZi1xiaoShuChangDu = shuZi1[1].length();
int count = shuZi1[1].length() - shuZi2[1].length();
for (int m = 0; m < count; m++) {
num20 = num20 * 10;
}
} else {
shuZi2xiaoShuChangDu = shuZi2[1].length();
int count = shuZi2[1].length() - shuZi1[1].length();
for (int n = 0; n < count; n++) {
num10 = num10 * 10;
}
}
xiaoShuHe = num20 + num10;
//如果小数部分相加大于原先最长长度说明有进位
if (xiaoShuHe.toString().length() > (shuZi1xiaoShuChangDu + shuZi2xiaoShuChangDu)) {
jinWei = xiaoShuHe.toString().substring(0, (xiaoShuHe.toString().length() - (shuZi1xiaoShuChangDu + shuZi2xiaoShuChangDu)));
}
} else {
xiaoShuHe = num20 + num10;
}
numHe = num2 + num1;
System.out.println("小数和=" + xiaoShuHe + "进位=" + jinWei);
System.out.println("整数和=" + numHe);
if (!jinWei.equals("0")) {
numHe = numHe.intValue() + 1;
String sum = numHe.toString() + "." + xiaoShuHe.toString().substring(1);
zongHe = Double.parseDouble(sum);
} else {
String sum = numHe.toString() + "." + xiaoShuHe.toString();
zongHe = Double.parseDouble(sum);
}
System.out.println("总和=" + zongHe);
}
或者是使用java中的BigDecimal
public static void main(String[] args) {
BigDecimal sum3 = new BigDecimal("0.21").add(new BigDecimal("0.02"));
System.out.println(sum3);
}