package com.framework.common.util;
import java.math.BigDecimal;
public class ArithUtil {
//默认除法运算精度
private static final int DEF_DIV_SCALE = 10;
/**
* 提供精确的加法运算。
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1,double v2){
return div(v1,v2,DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1,double v2,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static void main(String[] args) {
System.out.println(add(219.99,219.99));
}
}
- 浏览: 19459 次
相关推荐
java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java 精确的浮点数运算java 精确的浮点数运算java 精确的浮点数运算 java ...
java 精确的浮点数运算 工具类 java 精确的浮点数运算 工具类java 精确的浮点数运算 工具类 java 精确的浮点数运算 工具类java 精确的浮点数运算 工具类 java 精确的浮点数运算 工具类java 精确的浮点数运算 工具类 ...
在当前提供的文档内容中,我们可以看到...从文档提供的内容来看,浮点数运算设计的各个环节都为保证数值的精确度和运算的有效性提供了必要条件。这些知识对于深入理解计算机系统中数值表示和运算有着非常重要的意义。
浮点数运算在计算机科学中扮演着至关重要的角色,特别是在数值计算、图形处理以及各种科学计算领域。浮点数是一种表示实数的方式,它允许有小数部分,并且可以表示非常大或非常小的数值。在三菱的PLC(可编程逻辑...
浮点数运算在计算机科学中至关重要,因为它们允许更精确的数值计算,尤其是在科学计算、图形处理和工程应用中。 浮点数运算通常包括加法、减法、乘法和除法等操作,这些操作在硬件级别比整数运算更为复杂。Verilog...
以下是一个简单的示例,展示了浮点数运算的不精确性: ```java float f1 = 0.1f; float f2 = 0.2f; float result = f1 + f2; // 结果可能为0.30000001192092896,而不是期望的0.3 ``` 从这个例子可以看出,即使是...
### C语言浮点数运算详解 #### 一、浮点数的有效位数为何是6~7位? 在C语言中,`float`类型的变量通常用来表示实数,其有效位数大约为6~7位。这里提到的有效位数是指能够准确表示的十进制数字的数量。之所以说是6~...
总之,显控PLC上位软件编程中的浮点数运算指令是实现复杂控制逻辑的关键,它们允许控制系统对各种物理量进行精确的计算和控制。掌握这些指令的使用方法和注意事项,对于开发高效、稳定的工业自动化控制系统至关重要...
在实际编程中,尽管现代编译器和硬件通常能自动处理浮点运算,但在某些性能敏感或需要精确控制精度的场景下,程序员可能需要手动处理浮点数运算。例如,在游戏开发中,为了保证物理模拟的精确性,可能需要避免浮点...
总结来说,`decimal`模块主要用于金融计算和其他需要精确浮点数运算的领域,如与数据库交互时处理金融数据。它为那些对计算精度要求极高的应用提供了强大的工具,但需要注意的是,如果性能是关键因素,原生的浮点数...
常规的整数运算对于许多工业应用来说已经足够,但当涉及到精确的测量、比例控制或财务计算时,就需要浮点数运算。三菱PLC的FX、Q和L系列都支持浮点数处理,使得这些复杂的计算变得可能。 在FX系列PLC中,浮点数通常...
其中,浮点数运算作为处理数值计算的核心技术之一,其重要性不容忽视。浮点数的表示以及其运算过程中的高效实现,是推动现代计算机技术发展的关键技术之一。为了实现高效率的浮点数运算,硬件组件如加法器和算术逻辑...
### Python中实现精确的浮点数运算详解 #### 引言 在计算机科学领域,浮点数运算一直是程序设计中的一个重要且复杂的话题。由于计算机内存的限制与实数集不可数性的矛盾,浮点数在计算机中的表示并不总是精确的。...
浮点数运算在计算机系统中扮演着至关重要的角色,因为它...总的来说,浮点数运算的正确性和效率直接影响到计算机系统的性能和结果的精确度。理解和掌握这些规则对于设计高效的浮点运算单元和优化数值计算算法至关重要。
由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。
提出了一种非精确浮点数乘法器的算法设计,同时将该算法应用于高动态范围图片的图像处理中,并将结果与精确浮点数乘法器的应用结果进行对比,结果表明所提出的非精确浮点数乘法器具有很好的性能。
由于二进制无法精确表示所有十进制小数,例如0.1在二进制下就是无限循环的,因此在进行浮点数运算时,看似简单的加减乘除可能会导致结果不准确,尤其是在累加或累乘过程中。 浮点数的比较也是个需要注意的地方。...
JavaScript中的浮点数运算在某些情况下可能会导致不精确的结果,这是由于其内部处理机制和IEEE-754标准的特性所致。在JavaScript中,所有的数字都以Number类型存在,本质上是按照IEEE-754标准的双精度浮点数(double...