Java实现大数运算的实例代码

一、大数运算介绍

大数运算,顾名思义,就是很大的数值的数进行一系列的运算。它是指由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。

二、Java实现大数运算方法

在BigDecimal用法详解这篇文章中给大家介绍了Java中的大数类BigDecimal的用法,那么在Java中我们实现大数运算时便可以使用这个类进行快速简便的实现。

实现代码如下:

import java.math.BigDecimal;
class BigDecimalDemo
{
  static final int location = 10; //小数点后位数
  //加法 返回 num1+num2
  public double add(double num1, double num2){
    BigDecimal b1 = new BigDecimal(num1);
    BigDecimal b2 = new BigDecimal(num2);
    return b1.add(b2).doubleValue();
  }
  //减法 返回 num1-num2
  public double sub(double num1, double num2){
    BigDecimal b1 = new BigDecimal(num1);
    BigDecimal b2 = new BigDecimal(num2);
    return b1.subtract(b2).doubleValue();
  }
  //乘法 返回 num1*num2
  public double mul(double num1, double num2){
    BigDecimal b1 = new BigDecimal(num1);
    BigDecimal b2 = new BigDecimal(num2);
    return b1.multiply(b2).doubleValue();
  }
  //除法 返回 num1/num2
  public double div(double num1, double num2){
    return div(num1,num2,location);
  }
  //除法 返回num1/num2 自定义小数点后位数
  public double div(double num1, double num2, int _location){
    BigDecimal b1 = new BigDecimal(num1);
    BigDecimal b2 = new BigDecimal(num2);
    return b1.divide(b2,_location,BigDecimal.ROUND_HALF_UP).doubleValue();
  } 

  public static void main(String[] args)
  {
    BigDecimalDemo bd = new BigDecimalDemo();
    System.out.println(bd.add(12.123123,2)); //14.123123
    System.out.println(bd.sub(12.123,5.1)); //7.023
    System.out.println(bd.mul(9.99999,8.8888)); //88.887911112
    System.out.println(bd.div(13,3)); //4.3333333333 小数点后10位
    System.out.println(bd.div(13,3,20)); //4.333333333333333 小数点后15位 

    double b = 4.123123123123123123123123123; //4.123123123123123  double小数点后15位
    System.out.println(b); 

    BigDecimal b2 = new BigDecimal(4.123123123123123123123123123); //4.12312312312312290174531881348229944705963134765625
    System.out.println(b2);
  }
}

三、实现总结

这篇文章只是提供了一种大家在平时需要使用大数运算的场合下一种快捷的实现,只是对Java的相关API进行的封装,并未涉及算法实现原理。至于对大数运算的底层实现有兴趣的人,可以研究Java大数类的实现源码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java大数乘法的简单实现 浮点数乘法运算

    复制代码 代码如下: import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern; /** * 大数乘法的简单实现, 目前还不是很完善 * Fix:  * 1. 修改前后删除0的一些错误情况 * 2. 支持负数运算 * 3. 判断输入字符串是否符合小数定义

  • Java常用数字工具类 大数乘法、加法、减法运算(2)

    上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘.相加.相减的功能.其他的不做过多的铺垫了,我先讲一下各个功能的计算原理. Ⅰ. 乘法运算 为什么先说乘法运算--因为我先做了乘法运算.其实思路也是很多的,但是最终我参考了网络上的一种计算方案,然后做了很多的修改.感觉这个在思路上应该是比较简单的. 简单点说:把数拆分成整数小数分别进行乘法运算,然后将结果放入一个特定长度的数组中,在放入是要计算存放的偏移位置,最后再对这个进行处理(进位.标记等),得到最终的结果. 是不是有点晕.请我详细说一

  • Java实现大数运算的实例代码

    一.大数运算介绍 大数运算,顾名思义,就是很大的数值的数进行一系列的运算.它是指由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算. 二.Java实现大数运算方法 在BigDecimal用法详解这篇文章中给大家介绍了Java中的大数类BigDecimal的用法,那么在Java中我们实现大数运算时便可以使用这个类进行快速简便的实现. 实现代码如下: import java.math.BigDecima

  • Java实现单链表翻转实例代码

    Java实现单链表反转,递归和非递归两种形式 /** * 反转单链表 */ /** * 定义链表 * * @author 16026 * */ class Node { int val; Node next; public Node(int val) { this.val = val; } } public class ReverseList { /** * 反转链表 * * @param head * @return */ public static Node reverseList(Node

  • Java实现FTP服务器功能实例代码

    FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download).FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录.列文件目录.设置传输参数及传送文件等.使用FTP可以传送所有类型的文件,如文本文件.二进制可执

  • Java执行hadoop的基本操作实例代码

    Java执行hadoop的基本操作实例代码 向HDFS上传本地文件 public static void uploadInputFile(String localFile) throws IOException{ Configuration conf = new Configuration(); String hdfsPath = "hdfs://localhost:9000/"; String hdfsInput = "hdfs://localhost:9000/user/

  • 使用C++的string实现高精度加法运算的实例代码

    对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算. 本文讨论借助C++的string来实现高精度的运算. 首先输入的量直接存储为string,设为s1和s2. 接下来设计一个反转函数,用于把整个字符串反转(为了方便后续计算). string reverseStr(string input){ string output = ""; for(int i = 0; i < input.length(); i++){

  • java List 排序之冒泡排序实例代码

    java List 排序之冒泡排序实例代码 List排序,这里介绍两种排序: 1.Collections.sort()排序: 假如List集合中放的是Menu对象. public class Menu{ private int id; private String name; private int seq;//自定义排序字段 //构造函数.getter.setter省略....... } List<Menu> menus=new ArrayList<Menu>(); menus.

  • java中的 toString()方法实例代码

    前言: toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据. 最近项目中需要对一个ArrayList<ArrayList<Integer>> datas  形式的集合处理. 处理要求把集合数据转换成字符串形式,格式为 :子集合1数据+"#"+子集合2数据+"#"+....+子集合n数据. 举例: 集合数据 :[[1,2,3],[2,3,5]]  要求转成为 "[1,2,3]#[2,3,5]"

  • Java构建树形菜单的实例代码(支持多级菜单)

    效果图:支持多级菜单. 菜单实体类: public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 private int order; // 子菜单 private List<Menu> children;

  • java 实现输出随机图片实例代码

    java  实现输出随机图片实例代码 输出随机图片(CAPTCHA图像):Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的测试) 相关主要类(JDK 查看API) BufferedImage:内存图像 Graphics:画笔 ImageIO:输出图像 放在html页面上<img src/> 注意:浏览器默认会缓存图片 public static int WIDTH =

  • JAVA用户自定义事件监听实例代码

    JAVA用户自定义事件监听实例代码 很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下: package demo; import Java.util.EventObject; /** * Title: 事件处理类,继承了事件基类 * Description: * Copyright: Copyright (c) 2005 * Company: cuijiang * @author not attributable * @versi

随机推荐