package com.util;
import java.math.BigDecimal;
public class Arith {
private static final int DEF_DIV_SCALE = 10;
/**
* * 两个Double数相加 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double add(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.add(b2).doubleValue());
}
public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.add(v2);
}
public static Double add(Double[] vs) {
if(vs == null){
return 0.00;
}
BigDecimal b = new BigDecimal(0.00);
for(Double v : vs){
BigDecimal b1 = new BigDecimal(v);
b = b.add(b1);
}
return new Double(b.doubleValue());
}
/**
* * 两个Double数相减 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double sub(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.subtract(b2).doubleValue());
}
public static BigDecimal sub(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.subtract(v2);
}
/**
* * 两个Double数相乘 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double mul(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.multiply(b2).doubleValue());
}
public static BigDecimal mul(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.multiply(v2);
}
public static Double mul(Double v1, Double v2,int scale) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
if(scale<0){
scale=2;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.multiply(b2).setScale(scale,BigDecimal.ROUND_DOWN).doubleValue());
}
public static BigDecimal mul(BigDecimal v1, BigDecimal v2,int scale) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
if(scale<0){
scale=2;
}
return v1.multiply(v2).setScale(scale,BigDecimal.ROUND_DOWN);
}
/**
* * 两个Double数相除 *
*
* @param v1 *
* @param v2 *
* @return Double
*/
public static Double div(Double v1, Double v2) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP)
.doubleValue());
}
public static BigDecimal div(BigDecimal v1, BigDecimal v2) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
return v1.divide(v2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP);
}
/**
* * 两个Double数相除,并保留scale位小数 *
*
* @param v1 *
* @param v2 *
* @param scale *
* @return Double
*/
public static Double div(Double v1, Double v2, int scale) {
if(v1==null){
v1=0.00;
}
if(v2==null){
v2=0.00;
}
if (scale < 0) {
scale=2;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return new Double(b1.divide(b2, scale, BigDecimal.ROUND_DOWN).doubleValue());
}
public static BigDecimal div(BigDecimal v1, BigDecimal v2, int scale) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if(v2==null){
v2=new BigDecimal(0.00);
}
if (scale < 0) {
scale=2;
}
return v1.divide(v2, scale, BigDecimal.ROUND_DOWN);
}
public static BigDecimal setScale(BigDecimal v1,int scale) {
if(v1==null){
v1=new BigDecimal(0.00);
}
if (scale < 0) {
scale=2;
}
return v1.setScale(scale,BigDecimal.ROUND_DOWN);
}
public static Double setScale(Double v1,int scale) {
if(v1==null){
v1=0.00;
}
if (scale < 0) {
scale=2;
}
BigDecimal b1 = new BigDecimal(v1.toString());
return new Double(b1.setScale(scale,BigDecimal.ROUND_DOWN).doubleValue());
}
/**
* 比较大小
*
* @param v1
* @param v2
* @return -1表示小于,0是等于,1是大于
*/
public static int compareTo(BigDecimal v1, BigDecimal v2) {
if (v1 == null) {
v1 = new BigDecimal(0.00);
}
if (v2 == null) {
v2 = new BigDecimal(0.00);
}
return v1.compareTo(v2);
}
public static int compareTo(Double v1, Double v2) {
if (v1 == null) {
v1 = 0.00;
}
if (v2 == null) {
v2 = 0.00;
}
BigDecimal b1 = new BigDecimal(v1.toString());
BigDecimal b2 = new BigDecimal(v2.toString());
return b1.compareTo(b2);
}
public static void main(String[] args){
System.out.println(compareTo(new Double("0.001"),new Double("0.0010")));
}
/**
* BigDecimal.setScale()方法用于格式化小数点
* setScale(1)表示保留一位小数,默认用四舍五入方式
* setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
* setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
* setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
*
* setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
*
* setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入
*
* setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
*
* setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
*/
}
相关推荐
基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙
基于qiime2的16s测序数据分析分析激活qiime环境我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可/bin/bash# 设置目录路径# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"# 遍历_R1和_R2文件do # 检查R1文件是否存在then# 获取样本ID(去掉_R1.fastq.gz)
bigdecimal和double的那点儿事
1bigdecimal和double的相互转换问题 1.BigDecimal转double,使用BigDecimal类里面doubleValue()方法: BigDecimal latitude = 39.97268600; double latitudeDou = latitude.doubleValue() 2.double转BigDecimal,使用BigDecimal类里面valueOf()方法: double latitudeDou = 39.97268600; BigDecima
树莓派 SPI操作
扩展板配备一款0.96inch,128864分辨率的oled显示屏,通过SPI控制,先上显示效果图。由于程序过长,在这里我就不把代码全部贴出来了,只是简单讲解一下spi的操作函数。管脚如下如所有,左边方框的管脚分别为MOSI MISO SCLK,左边CE0,CE1为两个片选管脚,分别对应上图中的spidev0.0,spidev0.1两个设备。下载spidev库,复制到树莓派,并行运行如下命令解压安装。spi设备,此处设备为/dev/spi-decv0.0。在/dev路径下面,我们可以发现两个spi设备。
java arith_Arith .java 加减乘除运算 | 学步园
package com.web.ccb.commons.arith;import java.math.BigDecimal;/*** 加减乘除运算* @author Administrator*/public class Arith {// 默认除法运算精度private static final int DEF_DIV_SCALE = 10;// 这个类不能实例化private Arith() ...
解读Autoware.Universe规划模块:Behavior Path Planner
Behavior Path Planner是一个基于行为生成不同形态路径的路径规划器,负责生成 基于交通状况的路径(path), 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义), 将被发送到车辆接口的转向信号(turn signal) 命令。
软件测试——白盒测试实验报告,输入年月日算星期几
软件测试——白盒测试实验报告,输入年月日算星期几,测试用例设计和结果展示
BigDecimal类的加减乘除(解决double计算精度问题)
BigDecimal简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使
XTDrone——ALOAM与3D激光雷达三维SLAM(处理没有点云和坐标系报错的问题)
本文介绍了XTDrone中配置如何在三维环境中使用A-LOAM算法配合velodyneHDL32激光雷达包括依赖包安装、代码修改和PX4系统配置,以及相关报错细节的注意事项。
测试有不为零小数的Double或BigDecimal相乘的结果,关于小数问题
通信原理 | 窗函数 | 矩形窗 | 汉宁窗 | 汉明窗 | 布莱克曼窗 | 补零对频谱的影响
比如,原信号是一个周期的余弦信号,又给它补了9个周期长度的0,那么信号并不是10个周期的余弦信号,而是一个周期的余弦加一串0,补零并没有带来新的信息!频谱分辨率的含义是两个频率不同的信号在频率上可分,也就要求他们不能落到一个频域函数的主瓣上,所以,如果待分析的两个信号频率接近,而时域长度又短,那么在频域上他们就落在一个频域函数的主瓣内了,补再多的零也无济于事。而形状(主瓣宽度)是由补零之前的信号长度决定的,补零的作用只是细化了频域序列,并没有改变其主瓣宽度。所以,汉宁窗牺牲了分辨率,换来了旁瓣泄露的减小。
【示波器专题】示波器探头的原理深入——有源探头之差分有源探头
差分有源探头是一种特殊的有源探头,与普通单端有源探头的区别在于其前端的放大器是差分放大器。差分放大器的好处是可以直接测试高速差分信号,同时其共模抑制比高,对共模噪声的抑制能力比较好。...
BigDecimal加减乘除等计算详解
BigDecimal是Java编程语言中的一个类,用于处理任意精度的十进制数,特别适用于高精度计算场景。
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
java中double型_java中double型数据的加减乘除
java中double型数据的加减乘除public class Arith {private static final int DEF_DIV_SCALE = 10;/*** 两个Double数相加* @param v1* @param v2* @return Double*/public static Double add(Double v1,Double v2){BigDecimal b1 =...
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
实现double数值的精度加减乘除运算
写一个Arith工具类实现double数值的精度加减乘除运算: import java.math.*; public class Arith { //默认除法运算精度 private static final int DEF_DIV_SCALE=10; //构造器私有,让这个类不能实例化 private Arith() {} /**
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
mysql double bigde_项目中BigDecimal与Double使用场景
金额要用BigDecimal金额计算不能用doube!!!!金额计算必须用BigDecimal,下面对比一下用double 跟BigDecimal的区别。先看一个小例子:请看题:示例1问, 结果是多少? 0.01?No! 结果是0.009999999999999998!为什么会这样呢? 因为float和double都是浮点数, 都有取值范围, 都有精度范围. 浮点数与通常使用的小数不同, 使用中,...
java double丢失精度问题,加减乘除计算出错出现99999
问题一 原理:在使用double计算时,经常会存在精度丢失,总是在一个正确的结果左右偏0.0000**1,经常会因为精度丢失而导致程序处理流程出错。所有在进行财务相关计算时,需要使用BigDecimal数据格式。 BigDecimal 在《EffectiveJava》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。BigDecimal一共有4个够造方法,我们不关心用BigInteger来够造的那两个,..
[转] Float或Double浮点型计算精度问题的解决方法
转自:http://blog.youkuaiyun.com/bbg_0622/article/details/5616094 感谢原作者 BigDecimal 在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。BigDecimal一共有4个够造方法,我们...
关于java中double类型的比较大小的问题
许多人在进行double比较大小时会遇到2.0-1.1!=0.9的问题,这主要和double的精度有关,涉及到double在计算机内的存储结构的问题,这个可以参考这篇博客:http://blog.youkuaiyun.com/softwater007/article/details/3330619,另外double类型的存储符合IEEE754标准,相关标准内容可以参考这篇博客:http://blog.csdn
Float或Double浮点型计算导致小数点后面显示过长数据的解决方法
BigDecimal 在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。BigDecimal一共有4个够造方法,我们不关心用BigInteger来够造的那两个,那么还有两个,它们是: BigDecimal(double v
java四舍五入和精度控制
Java中Double的高精度问题及bigdecimal解决方式 翻了点资料,在有的编程语言中提供了专门的货币类型来处理这种情况,但是Java没有。 四舍五入 我们的第一个反应是做四舍五入。Math类中的round方法不能设置保留几位小数,我们只能 象这样(保留两位): public double round(double value){ return Math.rou
关于java中Double类型的运算精度问题
关于java中Double类型的运算精度问题 public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.0
关于Java中float double 等计算精度问题
关键字 Java 浮点数 精确计算 问题的提出: 如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100);...
java中double型数据的加减乘除
java中double型数据的加减乘除 publicclassArith{privatestaticfinalintDEF_DIV_SCALE=10;/***两个Double数相加*@paramv1*@paramv2*@returnDouble*/publicstaticDoubleadd(Doublev1,Doublev2){BigDecimalb1=newBigDecimal(v1...
java double类型精度_关于java中Double类型的运算精度问题
转自:http://blog.youkuaiyun.com/pttaag/article/details/5912171标题在Java中实现浮点数的精确计算AYellow(原作)修改关键字Java浮点数精确计算问题的提出:如果我们编译运行下面这个程序会看到什么?publicclassTest{publicstaticvoidmain(Stringargs[]){S...
java浮点数误差_Java浮点数float和double精确计算的精度误差问题总结
1、float整数计算误差案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结果出现误差。原因:超出float精度范围,无法精确计算。float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:2^23 = 8388608,一共七位,这意味着最多能有7位有...
JAVA中计算器的小数问题
<br />问题的提出:<br /> 如果我们编译运行下面这个程序会看到什么?<br /> public class Test {<br /> public static void main(String args[]) {<br /> System.out.println(0.05 + 0.01);<br /> System.out.println(1.0 - 0.42);<br /> System.out.println(4.015 * 100);<br /> System.out.pri
5524



被折叠的 条评论
为什么被折叠?



