import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode; /**
* 科学计算数字的帮助类
* @author yzl
*
*/
public class MathUtils {
/**
* 返回科学计算后的乘法结果
* @param val1
* @param val2
* @param mc 精度
* @param more 更多
* @return
*/
public static double multiply(double val1,double val2,int mc,double... more) {
if(val1==0 || val2==0) return 0;
BigDecimal bg1 = new BigDecimal(val1);
BigDecimal bg2 = new BigDecimal(val2);
BigDecimal result = new BigDecimal(0); if(more.length>0){
for(int i=0,len=more.length; i<len; i++){
if(i<len-1){
result = result.multiply(new BigDecimal(more[i]));
}else{
result = result.multiply(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
}
}
}else{
result = bg1.multiply(bg2, new MathContext(mc,RoundingMode.HALF_UP));
} return result.doubleValue();
}
/**
* 返回科学计算后的除法结果
* @param fz 分子
* @param fm 分母
* @param mc 精度
* @param more 更多
* @return
*/
public static double divide(double fz,double fm,int mc,double... more) {
if(fz==0 || fm==0) return 0;
BigDecimal bg1 = new BigDecimal(fz);
BigDecimal bg2 = new BigDecimal(fm);
BigDecimal result = new BigDecimal(0); if(more.length>0){
for(int i=0,len=more.length; i<len; i++){
if(i<len-1){
result = result.divide(new BigDecimal(more[i]));
}else{
result = result.divide(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
}
}
}else{
result = bg1.divide(bg2, new MathContext(mc,RoundingMode.HALF_UP));
} return result.doubleValue();
} /**
* 返回科学计算后的减法结果
* @param val1
* @param val2
* @param mc 精度
* @param more 更多
* @return
*/
public static double subtract(double val1,double val2,int mc,double... more) {
if(val2==0) return val1;
BigDecimal bg1 = new BigDecimal(val1);
BigDecimal bg2 = new BigDecimal(val2);
BigDecimal result = new BigDecimal(0); if(more.length>0){
for(int i=0,len=more.length; i<len; i++){
if(i<len-1){
result = result.subtract(new BigDecimal(more[i]));
}else{
result = result.subtract(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
}
}
}else{
result = bg1.subtract(bg2, new MathContext(mc,RoundingMode.HALF_UP));
} return result.doubleValue();
} /**
* 返回科学计算后的加法结果
* @param val1
* @param val2
* @param mc 精度
* @param more 更多
* @return
*/
public static double add(double val1,double val2,int mc,double... more) {
BigDecimal bg1 = new BigDecimal(val1);
BigDecimal bg2 = new BigDecimal(val2);
BigDecimal result = new BigDecimal(0); if(more.length>0){
for(int i=0,len=more.length; i<len; i++){
if(i<len-1){
result = result.add(new BigDecimal(more[i]));
}else{
result = result.add(new BigDecimal(more[i]), new MathContext(mc,RoundingMode.HALF_UP));
}
}
}else{
result = bg1.add(bg2, new MathContext(mc,RoundingMode.HALF_UP));
} return result.doubleValue();
}
}

科学计算法帮助类MathUtils的更多相关文章

  1. C#中如何防止Excel做科学计算法转换

    C#中如何防止Excel做科学计算法转换  string style = @"<style>.text{mso-number-format:\@;}</style>& ...

  2. Double类型的数值 在写入excel时 如何去掉 科学计算法的 后面数值+ E的 情况

    Double start = 20190724100000.000; 写入excel时 是 201907E+13 但想要输出的是 20190724100000 这种格式 Java在java.math包 ...

  3. 导出到Excel并且取消默认的科学计算法

    导出Excel的代码很多,其中这种最简单: protected void btnDCAll_Click(object sender, EventArgs e)        {            ...

  4. pandas中一列含有多种数据类型的转换:科学计算法转浮点数、字符映射

    import pandas as pd import re def getNum(x): """ 科学计数法和字符转浮点数 """ if r ...

  5. php将科学计算法得出的结果转换成原始数据

    由于php最大只支持显示 15位因的数据运算,大于15位的2数加减乘除的数据的结果,会直接用科学计数法显示, 但在现实生活中,科学计数法不利于普通人识别,所以,本函数将:科学计数法的出的结果转换成原始 ...

  6. php 将科学计算法得出的结果转换成原始数据 NumToStr

    由于php最大只支持显示 15位因的数据运算,大于15位的2数加减乘除的数据的结果,会直接用科学计数法显示, 但在现实生活中,科学计数法不利于普通人识别,所以,本函数将:科学计数法的出的结果转换成原始 ...

  7. 解决 PHPExcel 长数字串显示为科学计数

    解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...

  8. oracle 将科学计数法数据转换为非科学计数法数据

    oracle 自定义函数: CREATE OR REPLACE FUNCTION ConvertNumeric(rawData VARCHAR2) --用于返回转换科学计算法dhx RETURN VA ...

  9. 怎样批量把excel中已显示的科学计数法取消

    作者:iamlaosong 把一文本文档拷贝到EXCEL中时,当中一列数字所有变成科学计数法,这些数事实上是条码号,不需进行运算,怎样能够取消科学计算法,将数字显示成原来的样子呢?一般方法例如以下: ...

随机推荐

  1. Unity3D中的弹道和移动目标提前量计算

    弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺复杂的数学.网上这方面的资料还真不多,而且都是写的含含糊糊.抽空总结一下自己的方法. 讨论的前提是,假设目标 ...

  2. python测试开发django-4.获取url参数和name的作用

    前言 如打开博客园按时间分类标签页[https://www.cnblogs.com/yoyoketang/archive/2018/10.html],里面是时间参数是动态的,如果我想获取里面的时间参数 ...

  3. CRF 及CRF++ 安装与解释

    CRF简介 Conditional Random Field:条件随机场,一种机器学习技术(模型) CRF由John Lafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有 ...

  4. 新买的mac笔记本,发现vi编辑器没有颜色的解决方案

    新买的mac笔记本,发现vi编辑器没有颜色的解决方案 我在网络上找了一些资料,发现都有些问题,尤其是一些让修改根目录上的文件,发现根本无法修改. 但是在网络上找到了这篇文章: http://super ...

  5. guess-number-higher-or-lower

    // Forward declaration of guess API. // @param num, your guess // @return -1 if my number is lower, ...

  6. Longest Substring Without Repeating Characters leetcode java

    题目: Given a string, find the length of the longest substring without repeating characters. For examp ...

  7. JSON字符串转换为Map

    本文是利用阿里巴巴封装的FastJSON来转换json字符串的.例子如下: package com.zkn.newlearn.json; import com.alibaba.fastjson.JSO ...

  8. Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2016-07-20 16:27:34.873, end time: 2016-07-20 16:27:39.895, client elapsed: 0 ms

    方案一: 重启dubbo连接 zookeeper 方案二: 经压测,greys跟踪得知,是dubbo的monitor的问题.主要超时的方法是dubbo的getIP方法,monitor每次收集数据的时候 ...

  9. 【PHP 】 伪静态 - 3. 伪静态的基本使用

    原理图: 原先浏览器输入的网址会发送到apache服务器,然后apache会调用php模块来处理,最后找到你所想访问的页面; 如果在apahce, httpd.conf文件中开启rewrite机制,则 ...

  10. Coredata — 入门使用

    CoreData的底层实现尽管是使用的sqlite数据库.但是CoreData在使用起来但是和sqlite大相径庭.可能你会发现你连一句sql语句都不要写.CoreData存在于应用程序和持久化存储区 ...