今天有人问我,他把字段类型设计成float(2)后,插入数据93.5,后,为什么变成了90?

为了说明这个问题,我们先来看一段话(http://www.cnoug.org/viewthread.php?tid=56643):Oracle Online Help 说:FLOAT(b) specifies a floating-point number with binary precision b. The precision b can range from 1 to 126. To convert from binary to decimal precision, multiply b by 0.30103。

根据这段话,我们可以看到,float(2)中的2是一个binary precision,而不是我们常用的decimal precision。他们之间的换算关系是:binary precision=int(b*0.30103),因此我们这里实际上的精度应该等于int(2*0.30103)=0,即小数点后精度为0。

回到我们原来的问题,93.5化成浮点型9.35*10^1,这时9.35小数点后精度为0,成9,因此最后变成9*10^1=90。

类似的,我们可以设计成float(10),那么int(10*0.30103)=3,因此,如果插入93.5,就得出9.35--精度为3-->9.350,9.350*10^1=93.5。如果插入13884.2,得出1.38842--精度为3-->1.388,1.388*10^4=13880。

我们可以从以下测试更加清楚的看到这样的换算规则。

Connected to Oracle9i Enterprise Edition Release 9.0.1.1.1
Connected as aspire

SQL>
SQL> CREATE TABLE hjm_float_test
2 (a FLOAT(2),
3 b FLOAT(10),
4 c FLOAT,
5 d NUMBER);

Table created

SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(93.5,93.5,93.5,93.5);

1 row inserted

SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(93.665,93.665,93.665,93.665);

1 row inserted

SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(96.5,96.5,96.5,96.5);

1 row inserted

SQL> INSERT INTO hjm_float_test(a,b,c,d) VALUES(13884.2,13884.2,13884.2,13884.2);

1 row inserted

SQL> COMMIT;

Commit complete

SQL> SELECT * FROM hjm_float_test;

A B C D
---- ------------ -------------------------------------------------------------------------------- ----------
90 93.5 93.5 93.5
90 93.67 93.665 93.665
100 96.5 96.5 96.5
1000 13880 13884.2 13884.2

SQL> desc hjm_float_test;
Name Type Nullable Default Comments
---- ------ -------- ------- --------
A FLOAT Y
B FLOAT Y
C FLOAT Y
D NUMBER Y

SQL>

请特别注意的是,虽然我在设计表的时候设计成了float(2)、float(10),但是当我在desc表(代码最后7列)的时候却是看不到这样的设计结构的,这样的问题需要尤其引起注意!!

最后,让我们回顾一下,记住float(b)中的b是二进制的精度,他的换算规则是binary precision=int(b*0.30103)。

转载于:https://www.cnblogs.com/boulder19830907/archive/2008/01/31/1059627.html

oracle 的float(b)转相关推荐

  1. 2.1_3 Oracle float number类型 详解 + 测试实例(测试小数发现BUG)

    目录 前言 1 定义 1.1 FLOAT 类型 1.2 NUMBER 类型 2 测试实例 2.1 测试环境 2.2 DDL测试表 SQL 2.3 查看表结构 SQL 2.4 插入测试值 2.5 分类讨 ...

  2. 近义词表结构mysql_MySQL与Oracle数据类型对应关系(表格形式)

    说明 mysql oracle 变长字符串 VARCHAR[0-65535] 定义长度默认按字符长度计算,如果是GBK编码的汉字将占用2个字节 VARCHAR2[1-4000] VARCHAR是VAR ...

  3. 装oracle报temp无权限,华为云rds-PostgreSQL增强版替换Oracle常见问题以及解决方案

    华为云rds-PostgreSQL增强版提供兼容oracle功能,目前已经做到兼容oracle 90%的语法,在使用PostgreSQL增强版替换oracle的过程中,可能遇到一些问题,这里总结一下, ...

  4. MySQL与Oracle数据类型对比

    MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据 ...

  5. nvarchar转换为numeric时出错_Oracle转换Postgres

    1.前提 首先需要对Oracle和PostgreSQL的SQL都比较熟悉.对其理解的越详细就越具有优势,本文帮助读者迅速理解这两类SQL的区别是什么. 如果因ACS/pg而需要将Oracle移植到PG ...

  6. OGG12.1(LINUX) for 11G R2 RAC classical install 经典抽取模式单项同步配置OGG12.1

    博文结构图如下: 一.环境描述以及注意事项 1.1 环境简介 IP 系统 Oracle版本 OGG版本 源端 172.16.10.16/36 RHEL6.5 oracle11204 12.1 目标端 ...

  7. oracle数据库的浮点数,Oracle Float类型

    本篇文章帮大家学习Oracle Float类型,包含了Oracle Float类型使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 本教程将向您介绍Oracle FLOAT ...

  8. oracle 转换为double,Oracle - 将Varchar转换为Float并指定精度

    我需要将varchar转换为float. (该varchar保证是一个数字)Oracle - 将Varchar转换为Float并指定精度 我试图在预建表的顶部创建一个物化视图.因此,所有数据类型必须完 ...

  9. oracle浮点型数据类型,ORACLE的数据类型float(b)

    把字段类型设计成float(2)后,插入数据93.5,后,为什么变成了90? 为了表明 这个疑问 ,咱们 先来看一段话:Oracle Online Help 说:FLOAT(b) specifies ...

最新文章

  1. Selenium 1.0的历史及工作原理
  2. 【Java】 剑指offer(40) 最小的k个数
  3. 使用FIT2CLOUD在青云QingCloud快速部署和管理Kubernetes集群
  4. linux网络状态检测libcurl,使用curl进行网络诊断 - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  5. jenkins linux 发邮件,jenkins——邮件配置
  6. 巧用推荐墙入口,APP轻松盈利
  7. 智能数据引擎Dataphin重磅发布,提供一站式的技术管理能力
  8. 容器Docker详解
  9. Chapter4.5:根轨迹法考研参考题
  10. 非因解读 | Multiplex immunofluorescnece-多重免疫荧光结合单细胞蛋白组技术探索肿瘤微环境
  11. mysql中输出100内质数_SQL 打印 100 以内的质数
  12. 【小程序】小程序多次扫描不同二维码参数不生效问题
  13. 2022年Github学生包白嫖!
  14. SQL---In-Exists-Any
  15. Python基础练习题--第一章 Python语言入门
  16. 【开发教程1】疯壳·ARM功能手机-开发板上电教程
  17. 手写tomcat socket closed_ipad pencil2019防误触电容笔苹果air3触屏控手写笔mini5绘画202010元优惠券券后价65元...
  18. l1-norm loss l2-norm loss (l1范数和l2范数作为正则项的比较)
  19. [转载] 晓说——第30期:海上霸主航母(下)
  20. 神思二代身份证读卡器Demo的C++版本

热门文章

  1. iOS-生成国际化包-配置App多语言支持
  2. Lingo 优化实例 出版社问题
  3. 使用jsp+swfupload做上传时报Upload Error: 405错误
  4. 利用SOS分析调试托管代码--(1)
  5. 这些个JAVA开源工具(那是相当地多啊)
  6. (转贴)给Repeater、Datalist和Datagrid增加自动编号列
  7. 数字图像处理目录列表
  8. iOS流媒体直播整个框架介绍(HLS、RTSP)
  9. centos 6.5安装GitLab全过程和问题记录
  10. 图像拼接 SIFT资料合集