Google – String Decimal Add
给两个string表示实数(带小数点,不是整数),做加法。
[Solution]
和整数一样的解法,分成两部分加就好了
[Note]
split "."的时候一定要转义。
Read full article from Google – String Decimal Add
给两个string表示实数(带小数点,不是整数),做加法。
[Solution]
和整数一样的解法,分成两部分加就好了
[Note]
split "."的时候一定要转义。
public String decimalAdd(String a, String b) { if (a == null || b == null) { return a == null? b : a; } String[] sp1 = a.split("\\."); String[] sp2 = b.split("\\."); int remainder = 0; int l = sp1.length > 1? sp1[1].length() - 1 : -1; int r = sp2.length > 1? sp2[1].length() - 1 : -1; StringBuilder sb = new StringBuilder(); while (l >= 0 || r >= 0) { int d1 = l >= 0? sp1[1].charAt(l) - '0' : 0; int d2 = r >= 0? sp2[1].charAt(r) - '0' : 0; int sum = d1 + d2 + remainder; if (sum >= 10) { sum -= 10; remainder = 1; } else { remainder = 0; } sb.append(sum); l--; r--; } if (sp1.length > 1 || sp2.length > 1) { sb.append("."); } l = sp1[0].length() - 1; r = sp2[0].length() - 1; while (l >= 0 || r >= 0) { int d1 = l >= 0? sp1[0].charAt(l) - '0' : 0; int d2 = r >= 0? sp2[0].charAt(r) - '0' : 0; int sum = d1 + d2 + remainder; if (sum >= 10) { sum -= 10; remainder = 1; } else { remainder = 0; } sb.append(sum); l--; r--; } if (remainder != 0) { sb.append(remainder); } return sb.reverse().toString(); }