每周六都急急忙忙赶过来加班,今天早上一同事问我两个double类型相加会出现精度问题,找了很久没找到原因,后来在网上一看需要额外处理一下,提供几个通用的方法。
/**
* 提供精确的加法运算
* @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();
}
分享到:
相关推荐
当两个Double变量相加时,计算机会进行二进制运算,这个过程中可能会引入微小的误差,虽然人眼难以察觉,但在累计多个这样的计算后,误差会逐渐放大。 例如,题目中提到的171.6与28.17相加,理论结果应该是199.77。...
Java Double相加出现的怪事 Java 中的浮点数类型 float 和 double 在进行运算时会出现不精确的问题,这是因为计算机无法精确地表示十进制小数。这种问题不仅存在于 Java 中,在其它许多编程语言中也存在。 问题的...
此外,`Double`类还提供了一个静态方法`Double.doubleToLongBits(double value)`,它可以将`Double`值转换为`long`的位表示,这样可以基于位模式来比较两个浮点数,从而避免浮点计算的不精确性。比较位模式后再转换...
在Java编程语言中,将两个数字相加是一个基础操作,主要涉及到变量、数据类型和运算符等核心概念。本文将详细解析如何用Java编写代码来实现这个功能,并深入探讨相关知识点。 首先,Java中的基本数据类型包括整型...
- boolean类型用于存储逻辑值,只包含true和false两个取值,常用于条件判断。 - **char** - 字节数:2 - 存储Unicode码 - 默认值:'\u0000' - char类型用于存储单个字符,使用单引号进行赋值。一个汉字占用两...
本文将详细讲解如何使用链表来实现两个多项式的相加和相乘,并以链表形式输出结果。 首先,我们需要定义一个表示多项式项的`Node`类。`Node`类包含三个属性:`factor`代表项的系数,`element`代表项的指数,`next`...
在Java中,我们可以用两个`double`类型的实例变量来表示这两个部分。 ```java public class Complex { private double realPart; // 实部 private double imagPart; // 虚部 // 构造函数 public Complex...
还有其他类似的方法如`summarizingInt()`、`summarizingDouble()`和`summarizingLong()`,它们分别用于统计int、double和long类型的数值,返回一个`SummaryStatistics`对象,包含了计数、最小值、最大值、总和以及...
2. **运算过程**: 当两个浮点数相加、相减、相乘或相除时,结果可能会因为浮点运算的舍入规则而失去一些精度。 3. **类型转换**: 将`double`类型转换为其他数值类型,比如`int64`,如果`double`的值超出了整型的...
首先,我们可以设置数组的第一个元素作为当前最大值和最小值,然后遍历数组,更新这两个变量: ```java int max = numbers[0]; int min = numbers[0]; for (int i = 1; i ; i++) { if (numbers[i] > max) { max ...
编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。...
3. 布尔类型:boolean类型只有两个取值,true和false,不与任何整数值对应。 除了基本数据类型,Java还有引用数据类型,包括数组、类和接口。这些类型在内存中存储的是对象的引用,而非实际对象,它们的大小不是...
例如,在题目中,coordAdd 方法可以用于将两个坐标对象相加。返回值是指方法执行后的结果。例如,在题目中,coordAdd 方法可以返回一个新的坐标对象。 八、JAVA 中的问题解决 在 JAVA 中,问题解决是指根据问题的...
Java中Double除保留后小数位的几种方法是指在Java编程语言中,对Double类型数据进行保留小数位的操作。这种操作在实际开发中非常常见,例如在统计成绩、金融计算、科学计算等领域中都需要对Double类型数据进行保留...
当不同数据类型的变量进行运算时,会自动进行类型提升,例如,int和double相加时,int会被提升为double类型。然而,类型提升并不总是安全的,例如,如果将一个大整数转换为byte,可能会丢失数据,因此需要手动进行...
在这个示例中,我们创建了一个简单的GUI界面,包含两个文本框用于输入整数和浮点数,一个按钮用于触发转换操作,以及两个标签用于显示转换后的结果。当用户点击“Convert”按钮时,程序会尝试读取文本框中的值,将其...
在这里,两个double类型的变量相加后,结果仍然是double。但为了将结果赋值给int类型的变量z,需要进行强制类型转换,即将double类型的值转换为int类型。需要注意的是,这种转换可能会丢失精度,因为不是所有double...
在本课程“S1-使用Java语言理解程序逻辑-第二章变量、数据类型和运算符”中,我们将深入探讨Java编程的基础,特别是关注变量、数据类型以及运算符的使用。这些概念构成了任何程序的核心,是编写有效代码的基础。通过...