热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析Oracle数据库中的Number与Float数据类型

本文详细探讨了Oracle数据库中Number和Float数据类型的特性和使用方法。通过对比分析,解释了Number类型在精度和范围上的优势,以及Float类型在处理科学计算时的灵活性。文章还介绍了Number数据类型的语法结构及其在实际应用中的最佳实践,帮助读者更好地理解和选择合适的数据类型以满足不同的业务需求。

本文来自:http://blog.csdn.net/blackchoc/article/details/5070779

Number类型

Oracle number datatype 语法:NUMBER[(precision [, scale])]
有效为:从左边第一个不为0的数算起的位数。


scale > 0
   精确到小数点右边s位&#xff0c;并四舍五入。然后检验有效位是否 <&#61; p。
scale <0 
   精确到小数点左边s位&#xff0c;并四舍五入。然后检验有效位是否 <&#61; p &#43; |s|。
scale &#61; 0

    NUMBER表示整数

 

 

Float类型

【copy】今天有人问我&#xff0c;他把字段类型设计成float(2)后&#xff0c;插入数据93.5&#xff0c;后&#xff0c;为什么变成了90&#xff1f;

为了说明这个问题&#xff0c;我们先来看一段话&#xff08;http://www.cnoug.org/viewthread.php?tid&#61;56643&#xff09;&#xff1a;Oracle Online Help 说&#xff1a;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。

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


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

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


推荐阅读
author-avatar
手机用户2502938137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有