float 范围 java_java float与double的范围和精度

float 范围 java_java float与double的范围和精度1 范围 float 和 double 的范围是由指数的位数来决定的 float 的指数位有 8 位 而 double 的指数位有 11 位 分布如下 float 1bit 符号位 8bits 指数位 23bits 尾数位 double 1bit 符号位 11bits 指数位 52bits 尾数位 于是 float 的指数范围为 127 128 而 double 的指数范围为 1023 1024 并且指数位是按

1. 范围

float和double的范围是由指数的位数来决定的。

float的指数位有8位,而double的指数位有11位,分布如下:

float:

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

double:

1bit(符号位) 11bits(指数位) 52bits(尾数位)

于是,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。

2.  精度

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

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

double:2^52 = 70496,一共16位,同理,double的精度为15~16位。

3.Oracle中Number类型

在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范围在

1.0 * 10(-130) —— 9.9…9 * 10(125) {38个9后边带88个0}

的数字,当Oracle中的数学表达式的值>=1.0*10(126)时,Oracle就会报错。

Number的数据声明如下:

表示        作用        说明

Number(p, s)        声明一个定点数        p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,

Number(p)        声明一个整数        相当于Number(p, 0)

Number        声明一个浮点数        其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。

定点数的精度(p)和刻度(s)遵循以下规则:

?        当一个数的整数部分的长度 > p-s 时,Oracle就会报错

?        当一个数的小数部分的长度 > s 时,Oracle就会舍入。

?        当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。

?        当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入

4.验证

create or replace function  func_test(p_type number) return number

is

/*

功能:基于警度图数据同步

*/

l_cnt number;

begin

select p_type into l_cnt from dual;

return l_cnt;

end func_test;

/

show err;

5.结论

number 的总长度是40位,其中可能包括:小数点,负号位。

select to_char(func_test(-987.)) from dual;

-987.79   //包括小数点及负号位共40位

select to_char(func_test(9876.)) from dual;

9876.79   //4位整数+小数点+35位小数=40位

select to_char(func_test(987.)) from dual;

987.789   //3位整数+小数点+36位小数=40位

select to_char(func_test()) from dual;

   //40位整数

select to_char(func_test()) from dual;

1.9E+40   //41位时精度发生丢失

1.9×10^40 即

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224672.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:24
下一篇 2026年3月17日 上午11:25


相关推荐

  • ILRuntime(一)

    ILRuntime(一)之前简单的写了个 ILRuntime 和 Unity 互相调用的文章 https blog csdn net wangjiangron article details 感觉有蛮多不好的地方 所以想重新搞一搞 弄个简单的 ILRuntime 和 Unity 的基本框架 一些基本的概念在上面的文章讲过了 这边就懒得再说了 前期工作依旧是导入 ILRuntime 的库到 Unity 和一个 Hotf

    2026年3月19日
    2
  • OpenClaw安装避坑指南

    OpenClaw安装避坑指南

    2026年3月13日
    5
  • web安全(入门篇)

    web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。SQL注入数据库表出现场景当开发登录模块的时候,如果我们使用是mysql操作php,并非使用mysqli、PDO等;当查询用户是否存在的SQL是这样写的,select*fromuserwherename=

    2022年4月5日
    42
  • fisher最优分割法_a0裁切三次

    fisher最优分割法_a0裁切三次给定一个无向图 G=(V,E),每个顶点都有一个标号,它是一个 [0,231−1] 内的整数。不同的顶点可能会有相同的标号。对每条边 (u,v),我们定义其费用 cost(u,v) 为 u 的标号与 v 的标号的异或值。现在我们知道一些顶点的标号。你需要确定余下顶点的标号使得所有边的费用和尽可能小。输入格式第一行有两个整数 N,M,N 是图的点数,M 是图的边数。接下来有 M 行,每行有两个整数 u,v,代表一条连接 u,v 的边。接下来有一个整数 K,代表已知标号的顶点个数。接下来的 K

    2022年8月11日
    4
  • 笔记汇总目录

    笔记汇总目录SpringCloud微服务SpringCloud入门操作手册(Hoxton)RabbitMQRabbitMQRabbitMQ-Springboot整合LuceneSolrLuceneSolr811DockerDockerDocker案例Kubernetes原创Kubernetes原创k8s部署SpringCloud应用分布式事务分布式事务(一)Mysql本地事务和事务隔离级别分布式事务(二)分布式事务方案分布式事务(三)Seata分布式.

    2022年7月27日
    5
  • Oracle数据库基础(一)

    Oracle数据库基础(一)一 数据库简介 1 数据库系统的发展文件存储方式保存数据的弊端 1 缺乏对数据的整体管理 数据不便修改 2 不利于数据分析和共享 3 数据量急剧增长 大量数据不可能长期保存在文件中 2 数据库和数据库管理系统的概念数据库 Database 简称 DB 本质上讲 数据库就是信息的集合 它可以存在很长时间 往往是很多年 一般来讲 数据库就是按照数据结构来组织 存储和管理

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号