`
ethen
  • 浏览: 122219 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

精度溢出问题解决

UP 
阅读更多

float和double型的底层实现是二进制的。十进制中的一个有限位数小数,转换成二进制就不一定是有限位数了,一旦位数超过的float和double型的位数宽度,就会出现“精度溢出”。所以float和double型是为了科学计算而设计的,并不适合精确的十进制计算.

就像一个十进制的小数,要不断地乘以2取整,但在这个过程中可能会一直循环下去,这就造成了数据的不精确。

所以在必须要求数据的精确度时,不能使用float和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.015*100);

System.out.println(123.3/100);

}

}

输出结果为:

0.060000000000000005

0.5800000000000001

401.49999999999994

1.2329999999999999

BigDecimal类可解决计算精度问题可使用BigDecimal类创建一个封装类。封装加减乘除操作

例:对一个小数进行指定位数的四舍五入:

BigDecimal bd = new BigDecimal("0.9851095");

BigDecimal one = new BigDecimal("1");

System.out.println(bd.divide(one, 3, BigDecimal.ROUND_HALF_UP));

BigDecimal中还有很多相关的数值之间的计算方法,以及精确到的位数和四舍五入等

分享到:
评论

相关推荐

    js精度溢出解决方案

    在标题和描述中提到的“js精度溢出解决方案”,主要是针对在URL参数传递中遇到的数字参数过长导致的精度溢出问题。由于URL是有限制长度的,并且在某些浏览器或服务器端实现中,对URL长度也有一定的限制,因此当需要...

    解决GetTickCount长期不关机时间溢出问题

    为了解决`GetTickCount`的溢出问题,开发者通常会采用以下几种策略: 1. **使用替代API**:Windows API提供了其他更适合长时间计时的函数,如`GetTickCount64`(自Windows Vista起)和`QueryPerformanceCounter`。`...

    Matlab溢出问题的研究代码

    6. **解决溢出问题的方法**: - 使用更大的数据类型:如果知道运算结果可能超出当前数据类型的范围,可以尝试更换更大范围的数据类型。 - 避免直接的数值运算:可以使用对数、指数等函数间接计算,减少溢出风险。 ...

    高精度整数问题

    为了解决这个问题,可以使用高精度算法,例如使用分治法或者动态规划来避免中间结果过大。 Catalan数是一种特殊的整数序列,C(n) = (1/(n+1)) * (2n choose n),在组合数学、图论、语言学和计算机科学中有多种不同...

    VB 10进制转16进制不溢出,范围增大到922337203685477

    这个描述提到的源代码提供了一个定制的解决方案,能够处理大整数的转换,避免溢出问题,并扩大了有效数值范围。 在标准的VB中,`CStr()`或`Hex()`函数可以用来将十进制数字转换为十六进制字符串。然而,当处理超过...

    高精度_c++高精度_

    7. **溢出检测**:在进行高精度计算时,需要特别注意防止溢出。由于我们不再依赖内置的数据类型,所以必须在代码中手动检查和处理溢出情况。 8. **格式化输出**:高精度数字的输出也是一个挑战,需要设计一个函数来...

    低精度表示用于深度学习训练与推断.pdf

    低精度表示是深度学习训练和推断中的一个重要方向,但是低精度表示也带来了溢出错误和舍rounding错误等问题。为了解决这些问题,FP16/FP32混合精度训练方案和更多的创新方案被提出。这些方案可以减少内存访问、提高...

    高精度mod单精度简易函数

    根据给定的信息,我们可以深入探讨一...上述提供的单精度简易函数提供了一种简单而实用的方法来解决这类问题。通过理解其原理和应用场景,开发者可以更好地应对各种挑战,尤其是在ACM竞赛、密码学以及数值计算等领域。

    高精度加法减法乘法除法

    但是,了解这些运算背后的原理对于优化代码和解决特定问题非常有帮助。 高精度计算不仅涉及基本的数学运算,还需要考虑效率、内存占用以及错误处理等问题。例如,当两个大数进行运算时,可能需要预先分配足够的空间...

    高精度幂次方计算 C++实现

    对于负指数,可以通过`a^(-b) = 1 / a^b`转换为正指数计算,而溢出问题可以通过适当的数据结构(如`bigint`库)或使用模运算来解决。 总的来说,高精度幂次方计算是计算机科学中一个基础但重要的算法问题,它涉及到...

    施耐德PLC M262与LXM32S伺服多圈绝对值溢出

    ### 施耐德PLC M262与LXM32S伺服多圈绝对值溢出解决方案 #### 一、背景介绍 在自动化控制领域,施耐德电气(Schneider Electric)作为全球知名的自动化控制解决方案提供商,其产品广泛应用于各种工业环境中。其中,...

    js 溢出

    在提供的“Noname1.html”文件中,可能包含了关于JavaScript溢出问题的实例或者解决方法的详细讨论。由于没有实际文件内容可供分析,这里无法提供具体的内容摘要。建议直接打开文件查看,以获取更深入的理解和实践...

    使用串口4测试栈溢出,支持FreeRTOS,4个任务,1个定时器和RTC

    通过这种方式,可以更准确地定位和解决问题。 总的来说,通过利用STM32F103的串口4、FreeRTOS、多个任务、定时器和RTC,我们可以构建一个全面的栈溢出检测系统。这个系统不仅可以预防和检测栈溢出,还可以帮助优化...

    高精度加法、减法、乘法和除法

    高精度运算也可以用于解决一些特殊的问题,例如,判断一个数是否为回文数。回文数是指从左向右读与从右向左读都是一样的数。例如,数`56`加`65`得到的`121`是一个回文数。可以写一个程序,给定一个 N 进制数 m,求...

    was内存溢出 javacore分析工具jca 456

    总之,对于WebSphere内存溢出问题,Javacore分析工具JCA 456是开发者的重要助手,它能帮助我们快速定位问题,有效地解决问题,保证系统的稳定运行。正确理解和使用这类工具,对于提升企业应用的性能和可靠性至关重要...

    64位16进制字符串to双精度浮点数_labview_64位浮点_双精度_源码.zip

    在进行这样的转换时,开发者需要关注数据的精度损失、溢出问题以及不同平台可能存在的差异,因为不同的CPU架构可能会有不同的浮点数表示和运算规则。此外,对于大规模数据处理,效率优化也是一个不可忽视的方面。 ...

    在 S7-1500T CPU 运动机构中设置“动态调整带有路径分段”时,如何防止OB92 事件的缓冲区溢出?.pdf

    以上方法旨在平衡运动控制的精度与系统的处理能力,确保在执行“动态调整带有路径分段”时,不会因计算量过大而导致OB92事件的缓冲区溢出。在进行这些更改时,建议参考西门子的官方文档和最新的技术资料,以获取最...

    C++ builder delphi高精度浮点运算实例

    为了解决这个问题,开发者可以使用高精度浮点数库,例如GMP(GNU Multiple Precision Arithmetic Library)或MPFR(Multiple Precision Floating-Point Reliable)。 在C++ Builder中,你可以通过引入外部库来实现...

    单片机的频率等精度测量.zip

    单片机频率等精度测量是电子工程领域中的一个重要概念,特别是在微控制器的系统设计与调试过程中。本项目通过使用单片机的两个...通过这样的练习,不仅可以加深对单片机工作原理的理解,还能提高解决实际问题的能力。

    大数高精度运算库

    为了解决这种超出标准数据类型限制的问题,开发者们创造了各种大数高精度运算库。其中一个较为著名的库便是MapM高精度数学库,它能够支持复杂的大数运算,特别是处理非常大的整数或浮点数,乃至复数。 MapM库主要由...

Global site tag (gtag.js) - Google Analytics