今天遇到了这样的问题,就是浮点运算后数据比较出现错误,郁闷了半天,网上查了资料才发现浮点数直接用双目运算符连接会出现结果不准确问题。解决方法如下:
1。所有浮点运算都在数据库内做好,也就是都用sql实现了
2。用BigDecimal实现,方法如下(仅仅是个例子):
import java.math.BigDecimal;
public class tt {
/**
* @param args
*/
public static void main(String[] args) {
float a = 1.1f;
float b = 2.2f;
tt t = new tt();
System.out.println(t.add(a,b));
System.out.println(t.sub(a,b));
System.out.println(t.mul(a,b));
System.out.println(t.div(a,b));
System.out.println(t.round(a));
}
public float add(float v1,float v2){//加法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.add(b2).floatValue();
}
public float sub(float v1,float v2){//减法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.subtract(b2).floatValue();
}
public float mul(float v1,float v2){//乘法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.multiply(b2).floatValue();
}
public float div(float v1,float v2){//除法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.divide(b2,3,BigDecimal.ROUND_HALF_UP).floatValue();
}
public float round(float v){//截取3位
BigDecimal b = new BigDecimal(Float.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,3,BigDecimal.ROUND_HALF_UP).floatValue();
}
}
分享到:
相关推荐
为了解决这个问题,Java提供了`BigDecimal`类,它能够进行高精度的浮点数运算,保证结果的精确性。以下是使用`BigDecimal`进行浮点数运算的例子: ```java BigDecimal bd1 = new BigDecimal("0.1"); BigDecimal bd2...
5. **使用BigDecimal类**:在某些高级应用中,可以考虑使用类似Java的`BigDecimal`类,它提供了高精度的浮点数运算,但JavaScript原生并不支持,可能需要引入第三方库。 理解JavaScript浮点数计算的局限性并采用...
为了解决这个问题,Java提供了`java.math.BigDecimal`类,它支持任意精度的浮点数运算。BigDecimal使用一个BigInteger对象来表示无尺度值(unscaled value),并结合一个整数尺度(scale)来实现高精度。使用...
本文实例讲述了JavaScript解决浮点数计算不准确问题的方法。分享给大家供大家参考,具体如下: 最近在学习electron框架,想利用这个框架做一个简单的计算器demo。当我对小数进行运算时,发现了一个问题。 0.1+0.2=? ...
为了解决这个问题,我们可以利用特定的设计和算法,创建一个浮点数的精确计算类,以确保计算结果的准确性。 在Java中,浮点数(float和double)是基于IEEE 754标准的,它们使用二进制浮点表示法,这导致在进行除法...
在Java编程语言中,浮点数运算经常遇到精度问题,特别是在金融或科学计算等领域,对数值的精确性有着严格的要求。这是因为Java中的`float`和`double`数据类型基于二进制浮点数表示,这导致它们无法精确表示某些十...
Java 运算精度问题与解决方案 在 Java 中,对于浮点数的运算存在精度问题,这是由于浮点数的计算是非精确计算的。这种问题在财务应用中非常重要,因为它可能导致严重的财务错误。 问题描述 在 Java 中,浮点数的...
在代码中,我们创建了`BigDecimal`对象`b3`和`b4`,并展示了它们之间的加、减、乘、除运算,以及如何解决Java中浮点数运算的精度问题。例如: ```java BigDecimal b3 = new BigDecimal("0.09"); BigDecimal b4 = new...
2. 控制浮点数运算的精度:在某些情况下,我们可能不需要非常高的精度,可以通过设置`DecimalFormat`或者`printf`格式化输出来控制显示的位数,从而达到视觉上看似精确的效果。 3. 使用`BigInteger`处理整数部分:...
`bcadd()`函数允许指定精度来进行浮点数运算,并将结果转换为字符串,这样可以确保比较的准确性。例如,`var_dump(bcadd(0.2, 0.7, 1) == 0.9)`会返回`true`,因为它在指定精度1的情况下进行计算和比较。 浮点数...
为了解决这个问题,Java提供了`java.math.BigDecimal`类,它支持任意精度的十进制运算。`BigDecimal`类可以用来表示和操作精确的十进制数值,避免了浮点数运算中的精度问题。在`ThtBigDecimal.java`这个文件中,很...
Java的浮点数运算虽然方便,但可能会有舍入误差。因此,理解和掌握舍入模式(如ROUND_HALF_UP、ROUND_DOWN等)以及BigDecimal类的应用是必要的,特别是在金融计算和高精度计算中。 此外,示例程序可能还涉及了一些...
本文将详细介绍Java中的 `double` 类型精度问题,并提供几种解决方法。 #### 一、Java Double 精度丢失的原因 1. **二进制表示限制**:`double` 类型基于IEEE 754标准的双精度格式,使用64位来表示一个浮点数。...
例如,Python有`decimal`模块用于高精度浮点数运算,而Java提供了`BigDecimal`类。 5. **工具的使用**: 标签中的“工具”可能指的是用来检查和处理浮点数精度的工具,比如`printf`格式化输出在C语言中可以控制...
在Java和MySQL中,处理小数时需要注意一系列与精度、数据类型选择以及运算准确性相关的问题。首先,让我们深入了解Java中小数的保存方式。 Java提供了两种基本的小数数据类型:float和double。float占用4个字节,...
**描述**: 本节探讨了在Java中进行浮点数运算时可能遇到的精度问题。 **详细解释**: 在实际应用中,比如财务计算场景,我们需要确保计算结果的准确性。然而,由于浮点数(如 `float` 和 `double` 类型)的内部表示...
### Java解惑:深入理解Java中的奇数检测与浮点数运算 #### 奇数检测的陷阱 在Java编程中,我们经常会遇到需要判断一个整数是否为奇数的情况。一个直观的想法是通过模运算 `%` 来实现这一点。然而,在实际应用中,...
浮点数运算在计算机科学中扮演着至关重要的角色,尤其是在解决数学和工程问题时。这个题目可能是为了帮助参赛者理解浮点数的精确表示以及如何进行浮点数的除法操作。 浮点数是计算机中用来表示实数的一种方式,由于...
由于二进制浮点数无法精确表示某些十进制数,如0.1,所以在进行浮点数运算时,可能会得到预期之外的结果。在例子中,`2.00 - 1.10`看似应输出0.9,但实际输出可能是`0.8999999999999999`。这是因为1.1不能精确地表示...
本题旨在考察面试者对Java中浮点数运算的理解,特别是对于浮点数表示不精确性的认识。 **题目描述:** 题目给出了一段代码,用于模拟一个简单的找零场景。假设Tom用一张两美元的钞票支付价值1.10美元的商品,程序应...