从上文可以看出,每个数据类型都有其所能表示的范围,超过这个范围就会出一些莫名其妙的错误
上文网址:http://blog.csdn.net/shanliangliuxing/article/details/7394319
比方说两个int型数据相加时就有可能出现这样的错误
package com.autonavi.test;
import java.math.BigInteger;
/**
* 大数相加
* @author dashan.yin
*
*/
public class TestBigIntegerAdd {
public static void main(String[] args) {
int int1 = 123456789;
int int2 = 987654321;
System.out.println(add(int1, int2));
String str1 = "11123456789";
String str2 = "11987654321";
plus(str1, str2);
System.out.println(add(str1, str2));
}
public static int add(int int1, int int2) { //正常相加,超过范围时得到的结果不正确
return int1 + int2;
}
public static BigInteger plus(String str1, String str2) { //用BigInteger实现大数相加
BigInteger var1 = new BigInteger(str1);
BigInteger var2 = new BigInteger(str2);
BigInteger result = var1.add(var2);
//输出结果;
System.out.println(result);
return var1.add(var2);
}
public static String add(String data1, String data2) { //模拟加法运算,一步一步相加
int len1 = data1.length();
int len2 = data2.length();
int len = len1 > len2 ? len1 : len2; //得到最大长度,方便补齐
while (len1++ < len) {
data1 = "0" + data1;
}
while (len2++ < len) {
data2 = "0" + data2;
}
int arr[] = new int[len];
for (int i = 0; i < len; i++) {
arr[i] = data1.charAt(i) - '0' + data2.charAt(i) - '0'; //利用字符进行加法运算
}
for (int i = len - 1; i > 0; i--) {
int jinWei = arr[i] / 10; //进位
arr[i] = arr[i] % 10;
arr[i - 1] = arr[i - 1] + jinWei; //进到前面一位
}
StringBuffer sb = new StringBuffer();
if (arr[0] >= 10) { //处理第一位情况
sb.append(arr[0] / 10);
sb.append(arr[0] % 10);
} else {
sb.append(arr[0]);
}
for (int i = 1; i < len; i++) {
sb.append(arr[i]);
}
return sb.toString();
}
}