原价是18元,优惠17.99元,保存的最终价格是0.02元。看了一下代码:
discount = (long) (Double.parseDouble(dis)*100); freight = (long) (Double.parseDouble(fre)*100);
用这段代码做了测试就发现问题所在了。是精度问题,然后强制long转换后,把小数后面的内容给丢了。
public static void main(String[] args) { //System.out.println((long) Math.round((Double.parseDouble("17.99")*100))); System.out.println((Double.parseDouble("17.99")*100)); System.out.println((long) (Double.parseDouble("17.99")*100)); System.out.println((Double.parseDouble("10.99")*100)); System.out.println((long) (Double.parseDouble("10.99")*100)); System.out.println((Double.parseDouble("8.99")*100)); System.out.println((long) (Double.parseDouble("8.99")*100)); }
输出结果:
1798.9999999999998 1798 1099.0 1099 899.0 899
最简单的解决方案,在long强制转化前四舍五入,代码如下
System.out.println((long) Math.round((Double.parseDouble("17.99")*100)));
更优化的写法当然是用bigDecimal,上面只是最偷懒的修改方式。
相关推荐
"关于浮点数的精度问题" 浮点数精度问题是一个经典的问题,对于了解和学习C语言有一定帮助。浮点数的精度问题是由于计算机对浮点数的存储方式和表示方法所致。 IEEE754 的浮点数存储格式对浮点数的表示方法进行了...
`.vs`目录包含了Visual Studio的工作空间信息,`bin`和`obj`是编译过程中生成的临时和输出文件夹,而`Properties`则包含项目的属性设置,可能有关于程序集版本或输出的设置,这些与处理小数精度问题直接关系不大,但...
本文主要探讨的是“计算机精度问题”,特别是关于双精度浮点数(Double)的表示和计算中可能出现的问题。 双精度浮点数(Double)在计算机中通常按照IEEE 754标准进行存储和运算,它提供了大约15到16位的有效数字,...
【深度相机原理与精度分析】 深度相机是一种能够捕捉三维空间信息的设备,广泛应用于机器人导航、虚拟现实、增强现实、3D扫描等领域。常见的深度相机技术主要包括基于主动投射结构光、双目视觉和光飞行时间法(ToF...
在JavaScript编程语言中,计算精度问题是一个常见的挑战,特别是在处理浮点数时。这是因为JavaScript的浮点数表示遵循IEEE 754标准,这可能导致在进行数学运算时出现不精确的结果。例如,简单的加法、减法、乘法或除...
### Java Double 精度问题总结 在Java编程语言中,`double` 类型是一种用于表示64位浮点数的原始数据类型。虽然 `double` 提供了相对较高的精度,但在涉及精确数学运算(特别是涉及到小数值)时,由于其内部采用二...
在Javascript中parseFloat()方法会产生精度问题 代码如下: [removed] var a = “0.11”; var b = “0.2801”; var c = “1.002”; var sum1 = parseFloat(a) + parseFloat(b) + parseFloat(c); var sum2 = ...
NNIE精度问题定位步骤 NNIE精度问题定位步骤是指在算法移植海思芯片,运行在NNIE协处理器上时,因精度下降而出现的问题。为解决这个问题,本文档提供了一系列的步骤来分析和定位问题,提供思路。 1. 确认数据是否...
浮点数精度问题在计算机科学中是一个至关重要的概念,尤其对于进行数值计算的开发者来说,理解和掌握浮点数的表示和精度误差至关重要。本文将详细阐述IEEE 754标准,这一标准对浮点数的表示和计算进行了规范,旨在...
在探讨单片机测量信号频率精度的问题时,需要明确几个关键的概念和技术参数。首先,测量信号频率的精度通常与单片机的时钟频率、测量方法以及测量时间有关。精度达到0.001Hz意味着测量结果的最大误差不能超过0.001Hz...
### DecimalFormat精度解决与商业运算精度问题 在进行财务计算或者商业运算时,精度问题往往成为影响最终结果准确性的关键因素之一。特别是在Java这样的语言环境中,由于其内部采用二进制浮点数表示小数的方式,这...
代码如下: /** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失。 * * @param num1加数1 | num2加数2 */ function numAdd(num1, num2) { var baseNum, baseNum1, baseNum2; try { baseNum
在软件开发中我们经常遇到数据精度处理问题。 先看如下代码 #include <stdio.h> #include <stdlib.h> #include int main ( void )
海思的NNIE精度问题定位步骤 精度损失问题原因很多,但是从我们的开发经验来讲,有80%的问题是因为转换工具配置错误,还有一部分是模型训练的时候有问题,不是工具转换的问题,剩下的才去找海思定位,找海思定位...
为了避免浮点数精度问题,`bignumber`库通常采用字符串或其他特定的数据结构来存储大数字,这样就不会受到二进制表示的限制。通过这种方法,开发者可以在PHP中进行任意精度的数学运算,这对于金融计算、加密算法、...
JS精度问题,解决了JS加减乘除时候精度错误问题,就是后面带有很多0的问题
NULL 博文链接:https://hejie084.iteye.com/blog/1260556
为了解决这个问题,可以使用高精度算法,例如使用分治法或者动态规划来避免中间结果过大。 Catalan数是一种特殊的整数序列,C(n) = (1/(n+1)) * (2n choose n),在组合数学、图论、语言学和计算机科学中有多种不同...
在常规的QT和Windows系统中,内置的定时器在处理毫秒级别的延时时可能存在精度不足的问题,这可能会影响到一些对时间精确度要求极高的应用,比如游戏引擎、实时数据处理或精密算法的实现。 QT库提供了QTimer类作为...
java程序中数值的精度问题,float、double容易产生精度数值问题,不适合精度计算,而bigdecimal正好解决这一问题