C#中float的取值范围和精度

原文:C#中float的取值范围和精度

float类型的表现形式:

默认情况下,赋值运算符右侧的实数被视为 double。 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示:

float x = 3.5F;

如果在以上声明中不使用后缀,则会因为您尝试将一个 double值存储到 float 变量中而发生编译错误。

float的取值范围

float占用4个字节,和int是一样,也就是32bit.

1bit(符号位) 8bits(指数位) 23bits(尾数位)

存储方式如下图:

取值范围基本表达法

(浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号)----------------

于是,float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

其他特殊表示

1.当指数部分和小数部分全为0时,表示0值,有+0和-0之分(符号位决定),0x00000000表示正0,0x80000000表示负0. 2.指数部分全1,小数部分全0时,表示无穷大,有正无穷和负无穷,0x7f800000表示正无穷,0xff800000表示负无穷. 3.指数部分全1,小数部分不全0时,表示NaN,分为QNaN和SNaN,Java中都是NaN.

结论: 可以看出浮点数的取值范围是:2^(-149)~~(2-2^(-23))*2^127,也就是Float.MIN_VALUE和Float.MAX_VALUE.

精度

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

时间: 2024-11-07 03:56:03

C#中float的取值范围和精度的相关文章

C#中float的取值范围和精度分析

本文实例分析了C#中float的取值范围和精度.分享给大家供大家参考.具体分析如下: float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double. 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示: float x = 3.5F; 如果在以上声明中不使用后缀,则会因为您尝试将一个 double值存储到 float 变量中而发生编译错误. float的取值范围 float占用4个字节,和int是一样,也就是32bit. 1bit(符号位) 8bits(指数位)

17 Java语言基础long与float的取值范围谁大谁小

结论 float的取值范围比long大 验证 1 public class Test1_DataTypeConversion { 2 3 public static void main(String[] args) { 4 5 float f = 1.3f; 6 long l = 34; 7 // l = f; 8 // System.out.println(l); 9 //Type mismatch: cannot convert from float to long 10 f = l; 11

用DataReader在comboBox中显示name,取值id:

定义ItemObject类 classItemObject { public int id; public string name; publicItemObject(int id,string name) { this.id=id; this.name =name; } public override string ToString() { return name; } } 1.实例化对象,加载数据 ItemObject[] io = new ItemObject[3];          

mysql中数据类型的取值范围

mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到 18446744073709551615.一位为 8 个字节. 2.int 一个正常大小整数.有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,64

Hibernate中Cascade的取值

Cascade属性的取值有: 1.none:忽略其他关联的对象,默认值,无需设定. 2.save-update:当session通过save(),update(),saveOrUpdate()方法来保存或更新对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象. 3.persist:当session通过persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象. 4.merge:通过Session的merge()方法来保存当前对象时,会级联融合所有关联的游离对

ul 中的li取值问题

ul 中的li定义的value会自动转换为int.数值,ie 浏览器下大于int最大值,显示int最大值,其他浏览器显示为0. 而且无论你定义什么值,都会转int.默认为1,例如value=中文. 所以如果你想要实现正确取值,就需要换一个li属性例如自定义属性time.或者改一种实现标签元素,例如div.都可以. 也可以在li中定义一个隐藏的input,然后取值:

关于模板中的动态取值 ---反射与javascript脚本编译

在项目中经常遇到一个问题,打印word或者打印excel的时候,我们经常使用一对一的赋值或者批量替换的方式来对模板进行修改. 但是现在遇到两种场景: 1.取值是通过自定以方法进行取值的. 如:一个销售单据,会涉及到很多种费用,并且这些费用是由后台配置的,非常灵活.但是我们在制作打印模板时取值各项费用我们该如何去定义他呢,如何给他赋值呢?我们如果针对这一个场景下的模板进行一个特殊定义后,在打印另一份单据或者遇到同样的取值非常灵活的数据,是不是也需要进行特殊处理呢. 2.取值是通过自行定义进行取值的

小程序中map的取值和赋值

1.初始化 resultMap: { "near": [], "join": [], "publish": [] } 2.js中直接取 const val = this.data.apiMap[key]; 3.页面取值 wx:for="{{resultMap.near}}" 4.赋值 let key = "resultMap." + keyName; this.setData({[key]: newList

ul>li中自定义属性后取值的问题

动态赋值的li: $.ajax({ type: "POST", url: "${base}/before/subDemand/listType", success: function(data){ for(var i=0;i<data.listType.length;i++){ $("#show_type").append("<li text='"+data.listType[i].dict_key+"'