java编写函数实现类似 BigDecimal功能

import java.io.IOException;
import java.math.BigDecimal;

public class Example9_22 {
    public static void main(String[] args) throws IOException {
        Big_Decimal a = new Big_Decimal();
        a.BigDecimal_Add("12212.5132", "3232323.43323234");
        a.Sub("12212.5132", "3232323.43323234");
        a.Mul("65555.5453654654", "99.353");
        a.Div("99999.99999", "888.88888");
        BigDecimal
    }
}

class Big_Decimal {
    int decimal1, decimal2;
    long integer, decimal;

    public void BigDecimal_Add(String a, String b) {
        int i = a.indexOf('.');
        String z1 = a.substring(0, i);
        String x1 = a.substring(i + 1, a.length());
        i = b.indexOf('.');
        String z2 = b.substring(0, i);
        String x2 = b.substring(i + 1, b.length());
        int l1 = x1.length();
        int l2 = x2.length();
        int l = Math.abs(l1 - l2);
        String s = "";
        for (i = 0; i < l; i++)
            s = s + '0';
        if (l1 < l2)
            x1 = x1 + s;
        else
            x2 = x2 + s;
        integer = Integer.parseInt(z1) + Integer.parseInt(z2);
        decimal = Integer.parseInt(x1) + Integer.parseInt(x2);
        decimal1 = Integer.parseInt(x1);
        decimal2 = Integer.parseInt(x2);
        String s1 = String.valueOf(decimal);
        StringBuilder stringBuilder = new StringBuilder(s1);
        if (s1.length() > Math.max(x1.length(), x2.length())) {
            integer++;
            stringBuilder.delete(0, 1);
            s1 = stringBuilder.toString();
            System.out.println(s1);
            decimal = Integer.parseInt(s1);

        }

        System.out.printf("%d.%s\n", integer, s1);

    }

    public void Sub(String a, String b) {
        int i = a.indexOf('.');
        String z1 = a.substring(0, i);
        String x1 = a.substring(i + 1, a.length());
        i = b.indexOf('.');
        String z2 = b.substring(0, i);
        String x2 = b.substring(i + 1, b.length());
        integer = Integer.parseInt(z1) - Integer.parseInt(z2);
        int l1 = x1.length();
        int l2 = x2.length();
        int ll = Math.max(l1, l2);
        int l = Math.abs(l1 - l2);
        String s = "";
        for (i = 0; i < l; i++)
            s = s + '0';
        if (l1 < l2)
            x1 = x1 + s;
        else
            x2 = x2 + s;
        int sum = 1;
        for (i = 0; i < l1; i++)
            sum = sum * 10;
        if (Integer.parseInt(x1) < Integer.parseInt(x2)) {
            integer--;
            decimal = Integer.parseInt(x1) + 1 * sum - Integer.parseInt(x2);
        } else
            decimal = Integer.parseInt(x1) - Integer.parseInt(x2);
        String s1 = String.valueOf(decimal);
        if (s1.length() < ll)
            l = ll - s1.length();
        s = "";
        for (i = 0; i < l; i++)
            s = s + '0';
        s1 = s + s1;
        decimal = Integer.parseInt(s1);
        System.out.printf("%d.%s\n", integer, s1);

    }

    public void Mul(String a, String b) {
        int i = a.indexOf('.');
        int j = b.indexOf('.');
        a = a.replace(".", "");
        b = b.replace(".", "");
//        StringBuffer stringBuffer = new StringBuffer(a);
//        stringBuffer.reverse();
//        a = stringBuffer.toString();
//        stringBuffer = new StringBuffer(b);
//        stringBuffer.reverse();
//        b = stringBuffer.toString();
//        System.out.println(a + b);
        int n = i + j;
        int k = a.length() + b.length() - n;
        char[] a1 = a.toCharArray();
        char[] b1 = b.toCharArray();
        int[] mul;
        int sum;
        mul = new int[a.length() + b.length()];
        for (i = 0; i < a.length() + b.length(); i++)
            mul[i] = 0;
        for (i = 0; i < a1.length; i++) {
            for (j = 0; j < b1.length; j++) {
                mul[i + j] += (a1[i] - '0') * (b1[j] - '0');
            }
        }
        for (i = mul.length - 1; i > 0; i--) {
            mul[i - 1] += mul[i] / 10;
            mul[i] = mul[i] % 10;
        }
        for (i = 0; i < mul.length - 1; i++) {
            System.out.print(mul[i]);
            if (i == n-2)
                System.out.print(".");
        }
        System.out.println();

    }

    public void Div(String a, String b) {
        int i = a.indexOf('.');
        int j = b.indexOf('.');
        a = a.replace(".", "");
        b = b.replace(".", "");
        int n = i-j ;
        char[] a1 = a.toCharArray();
        int[] s = new int[100];
        int[] result = new int[100];
        for (i = 0; i < 100; i++) {
            s[i] = 0;
            result[i] = 0;
        }
        for (i = 0; i < a.length(); i++) {
            s[i + 1] = a1[i] - '0';
        }
        int x = 0;
        for (i = 1; i < 30; i++) {
            result[i] = (x * 10 + s[i]) / Integer.parseInt(b);
            x = (x * 10 + s[i]) % Integer.parseInt(b);
        }
        for (i = 0; i < 100; i++)
            if (result[i] != 0) {
                break;
            }
        int k = 0;
        for (j = i; j < 30; j++) {
            k++;
            System.out.print(result[j]);
            if (k == n+1)
                System.out.print(".");
        }
    }
}

乘法和除法都是转化成大数乘法和除法的方法来实现的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值