使用浮点类型导致计算误差以及判断误差

1.计算误差

浮点的精度是可变的,除非分数是2的整数幂次方,否者无法用有限的二进制小数表示。

即 0.1 分母为10,
则分数应该是2的3次方至2的4次方之间,具体是多少我也算不出来了···。即这个次方数会为一个特别长的小数,在有限的长度中无法体现出来。

则0.1会被表示为一个十分接近0.1的值,如0.1000000000000000001
或0.099999999999999999

所以在精确的计算中,使用浮点类型会造成计算的误差。

使用decimal可以解决此问题,不过decimal的范围比浮点类型来说相对较小,所以在将浮点类型转换成decimal类型时,有溢出的风险。

2.判断误差

基于上述解释

float
num1=0.1F;

decimal
num2=0.1M;


num1!=num2;

使用浮点类型导致计算误差以及判断误差,布布扣,bubuko.com

时间: 2024-12-15 01:47:46

使用浮点类型导致计算误差以及判断误差的相关文章

Java中浮点类型的精度问题 double float

要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法与浮点数的结构组成.因为机器只认识01,你想表示小数,你要机器认识小数点这个东西,必须采用某种方法.比如,简单点的,float四个字节,前两个字节表示整数位,后两个字节表示小数位(这就是一种规则标准),这样就组成一个浮点数.而Java中浮点数采用的是IEEE 754标准. IEEE 754 标准 更多详见:https://baike.baidu.com/item/IEEE%20754 IEEE 754 标准是IEEE二进位浮点数

java 基础 浮点类型

1.浮点类型用于表示小数的数据类型. 2.浮点数原理:也就是二进制科学计数法. 3.Java的浮点类型有float和double两种. 4.Java默认浮点类型计算的结果是double类型,字面量也是double类型. 1.十进制浮点数科学计数法: 219345 = 2.19345*(10^5) 2.二进制浮点数科学计数法: 10111 = 1.0111*(2^100) 1.float类型共32位,1位为符号位, 指数8位, 尾数23位. 2.float的精度是23位(即能精确表达23位的数,超

在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录,

前几天写一个js的时候遇到一个非常诡异的事情,这个问题是这样的,我要获取一个页面的DOM元素的val值,判断这个值是否比某个变量大,这个需求原先数字最大也就是10,现在要改了,可能会更多,这个时候我发现比较大小的判断就出了问题: 代码粘出来: 1 // js弱类型导致的诡异现象,11 > 9 false 2 function downtest(id){// 现象是当val取到的元素val值是11的时候,11>9结果是false 3 // 当前点击下一题的是第几题, 4 var val=$(&q

C语言-浮点类型

C语言-浮点类型 浮点类型 在0的两侧有一小块区域,这个区域非常接近0,但是不等于0,是float(表达范围数量级10^-38^)或者double(达范围数量级10^-308^)无法表达的,而0是可以表达的:nan:不是一个有效的数字.有效数字:在有效数字范围是精确的,超出这个范围是不准确的. %e:输出科学计数法的形式,%E只是表示时字母大写. 在使用科学计数法时,数字与E或者e之间不要有任何空格.小数点位数较多时,double有时显示不出来小数位的数字如1E-10,以double输出时只是0

MySQL数据类型--------浮点类型实战

1. 背景 * MySQL支持的浮点类型中有单精度类型(float), 双精度类型(double),和高精度类型(decimal),在数字货币类型中推荐使用高精度类型(decimal)来进行应用. * MySQL浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001.FLOAT和DOUBLE在不指

使用头文件cfloat中的符号常量获知浮点类型数据的表数范围---gyy整理

使用头文件cfloat中的符号常量获知浮点类型数据的表数范围 cfloat头文件包含了系统的浮点数的长度限制 头文件climits中的符号常量是获知整型数据的表数范围,并不能获取浮点类型数据的表数范围. <climits>该头文件包含了系统的整数长度的限制,它已取代了头文件<limits.h> <cfloat> 该头文件包含了系统的浮点数的长度限制,它以取代了头文件<float.h> <cfloat> 头文件各字符常量的取值和含义 上图中在程序中

Java浮点类型的格式化

概述 基于Java,介绍将浮点类型小数进行格式化的方案. 正文 在Java中,用于格式化小数的类是java.text.DecimalFormat,比如你可以这样使用: double data = 3334590479.22d; System.out.println(data); // 3.33459047922E9 java.text.DecimalFormat df = new java.text.DecimalFormat("$#,###.##"); String result =

网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型

C语言程序设计进阶_第一周:数据类型:整数类型.浮点类型.枚举类型 1.0数据类型 1.1整数类型 1.2浮点类型 1.3逻辑类型 1.4类型转换和条件运算 1.0数据类型 1 整数 char(%c), short, int(%d), long(%ld), long long(C99) 2 浮点数 float(%f), double(%lf), long double(C99) 3 逻辑 bool(C99) 4 指针 5 自定义类型 所表达的数的范围:char<short<int<flo

Swift学习笔记_数据类型_浮点类型

浮点类型 是有小数部分的数字.表示的范围比整数类型更大,可存储比Int类型更大或更小的数字. 提供了3种表示形式: (1)Float 表示32位浮点数,可精确到小数点后6位. (2)Double 表示64位浮点数,可精确到小数点后15位. (3)Float80 表示80位浮点数,可精确到小数点后17位. ※Float32和Float64分别是Float和Double的类型别名 var floatv:Float = 0.12345678912345  //0.1234568 var floatv2