package com.javause.useStr.addString;
public class Solution {
public static void main(String[] args) {
// 定义两个小数,做字符串小数相加。
String a = "1.234";
String b = "2.874";
// 将两个字符串式的小数相加,返回字符串形式的结果
System.out.println(doStringPlus(a, b));
}
private static String doStringPlus(String a, String b) {
String result = "";
// 确定.的位置
int posa = a.indexOf(".");
int posb = b.indexOf(".");
// a的整数部分
String parta1 = a.substring(0, posa);
// a的小数部分
String parta2 = a.substring(posa + 1, a.length());
int a2length = parta2.length();
// b的整数部分
String partb1 = b.substring(0, posb);
// b的整数部分
String partb2 = b.substring(posb + 1, b.length());
int b2length = partb2.length();
// 两个小数部分的最大长度
int length = Math.max(a2length, b2length);
// 小数部分的长度不同
if (a2length != b2length) {
// 第二个数的小数部分长
if (length > a2length) {
// 第一个数的小数部分添加0使长度相同
int minus = length - a2length;
for (int i = 0; i < minus; i++) {
parta2 = parta2 + "0";
}
}
// 第一个数的小数部分长
if (length > b2length) {
// 第二个数的小数部分添加0,使长度相同
int minus = length - b2length;
for (int i = 0; i < minus; i++) {
partb2 = partb2 + "0";
}
}
}
// 整数部分相加
int num1 = Integer.valueOf(parta1) + Integer.valueOf(partb1);
// 小数部分相加
int num2 = Integer.valueOf(parta2) + Integer.valueOf(partb2);
// 小数部分转为字符串
String string2 = String.valueOf(num2);
int s2length = string2.length();
// 小数部分最高位有进位
if (s2length > length) {
// 将小数部分最高位去掉
string2 = string2.substring(1, s2length);
// 添加到整数部分
num1 = num1 + 1;
} else if (s2length < length) {
// 高位补零,防止加后结果高位少了0,090变成90
int minus = length - s2length;
for (int k = 0; k < minus; k++) {
string2 = "0" + string2;
}
}
String string1 = String.valueOf(num1);
// 将小数末尾的0去掉
// 重新计算s2的长度
s2length = string2.length();
for (int k = 0; k < s2length; k++) {
if (string2.endsWith("0")) {
string2 = string2.substring(0, s2length - 1 - k);
}
}
// 末尾全部是o时,去掉小数点
if (string2.length() == 0) {
result = string1;
} else {
result = string1 + "." + string2;
}
return result;
}
}