使用SqlServer中的float类型时发现的问题
1、当值的位数大于6位是float型再转varchar型的时候会变为科学技术法显示
此时只好将float型转换成numeric型,再转换成varchar
2、float型变量在存入值时,有时值得大小会发生改变。这个现象发生在对报价保存时,如:保存一个3.8,但到了数据库中变成了3.80001124或3.79998999等
在SqlServer的帮助中是这样描述float类型的:用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。
所以今后这个类型一定要慎用
评论
#1楼 218.69.6.* 2007-08-05 16:09 William Wang [未注册用户] 



























在客户端(C#),如果存入一个带小数位的小数,如:Insert into (fieldA) values (2.4);其中,fieldA是float类型.存入数据库后,数据有可能变成2.400000或者2.4000001或者2.399999999.晕.
请问如何设置.
select cast(fieldA as decimal(18,1))
=========================================================================



























SQL Server 2000中的float类型显示四位小数
SQL Server 2000中:
如果是数据类型Float 11.8,它就默认以11.800000000000001存储了,显示的时候看起来蛮不爽的,偶只想要4位小数,找了好多资料,把float型用smallmoney型感觉上就可以了。
浮点数据类型用于存储十进制小数。浮点数值的数据在SQL Server 中采用上舍入(Round up 或称为只入不舍)方式进行存储。所谓上舍入是指,当(且仅当)要舍入的数是一个非零数时,对其保留数字部分的最低有效位上的数值加1 ,并进行必要的进位。若一个数是上舍入数,其绝对值不会减少。如:对3.14159265358979 分别进行2 位和12位舍入,结果为3.15 和3.141592653590。
货币数据表示正的或负的货币值。在 Microsoft SQL Server 2000 中使用 money 和 smallmoney 数据类型存储货币数据。货币数据存储的精确度为四位小数。(正好达到我的要求:显示四为小数就OK了)
Monetary data represents positive or negative amounts of money. In Microsoft® SQL Server™ 2000, monetary data is stored using the money and smallmoneydata types. Monetary data can be stored to an accuracy of four decimal places. Use the smallmoney data type to store values in the range from -214,748.3648 through 214,748.3647 (requires 4 bytes to store a value).



























SQL Server 中Float类型 如何转换成 Varchar类型 ?
方法 如下 :
float转化成varchar类型
select convert(varchar(8000),cast(convert(float,'12345678900') as decimal))
select str(convert(float,'123456789000'),len(convert(float,'123456789000')))
select convert(varchar(8000),cast(convert(float,'12345678900') as decimal))
STR ( float_expression [ , length [ , ] ] )
备注
如果为 STR 提供 length 和 decimal 参数值,则这些值应该是正数。在默认情况下或小数参数为 0 时,数字舍入为整数。指定的长度应大于或等于小数点前面的部分加上数字符号(如果有)的长度。短的 float_expression 在指定长度内右对齐,长的 float_expression 则截断为指定的小数位数。例如,STR(12,10) 输出的结果是 12。它在结果集内右对齐。而 STR(1223,2) 则将结果集截断为 **。可以嵌套字符串函数。
注意:
若要转换为 Unicode 数据,请在 CONVERT 或 CAST 转换函数内使用 STR。
参数
float_expression
带小数点的近似数字 (float) 数据类型的表达式。
length
总长度。它包括小数点、符号、数字以及空格。默认值为 10。
decimal
小数点后的位数。decimal 必须小于或等于 16。如果 decimal 大于 16,则会截断结果,使其保持为小数点后具有十六位。
返回类型
char
decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal 数据类型存储了一个确定的数字表达法;没有存储值的近似值。
定义 decimal 的列、变量和参数的两种特性如下:
- p
指定精度或对象能够控制的数字个数。
- s
指定可放到小数点右边的小数位数或数字个数。
p 和 s 必须遵守以下规则:0 <= s <= p <= 38。
numeric 和 decimal 数据类型的默认最大精度值是 38。在 Transact-SQL 中,numeric 与 decimal 数据类型在功能上等效。
当数据值一定要按照指定精确存储时,可以用带有小数的 decimal 数据类型来存储数字。
有关数学运算如何影响结果的精度和小数位数的信息,请参见精度、小数位数和长度。
使用 float 和 real 数据
float 和 real 数据类型被称为近似的数据类型。在近似数字数据类型方面,float 和 real 数据的使用遵循 IEEE 754 标准。
近似数字数据类型并不存储为多数数字指定的精确值,它们只储存这些值的最近似值。在很多应用程序中,指定值与存储值之间的微小差异并不明显。但有时这些差异也值得引起注意。由于 float 和 real 数据类型的这种近似性,当要求精确的数字状态时,比如在财务应用程序中,在那些需要舍入的操作中,或在等值核对的操作中,就不使用这些数据类型。这时就要用 integer、decimal、money 或 smallmone 数据类型。
在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用 float 或 real 列。最好限制使用 float 和 real 列做 > 或 < 的比较。
IEEE 754 规格提供了四种舍入模式:舍入到最接近的值、上舍入、下舍入和舍入到零。Microsoft® SQL Server™ 使用上舍入。所有的数值必须精确到确定的精度,但会产生细小的浮点值变化。因为浮点数字的二进制表示法可以采用很多合法舍入规则中的任意一条,因此我们不可能可靠地量化一个浮点值。
使用SqlServer中的float类型时发现的问题的更多相关文章
- C#和C++中的float类型
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#和C++中的float类型.
- Oracle中的float类型字段
Oracle中的float类型对应着C#中的decimal类型
- 正确生成浮点型的方法,解决sqlachemy Float浮点型的坑,生成float类型时,长度和精度均为0,导致查询不到结果!
问题描述 在使用flask_sqlachemy时,给price字段选择了Float类型,数据库用的mysql,生成数据库表后,发现 from sqlalchemy import Float,Colum ...
- SQL中的float类型的数据
问题1. 如何在SQL中默认的使用float类型的数据 SQL中想要通过计算的方式最快的得到一个float类型的数据,只需要运算的其中一个值后面加上小数点就ok. 比如 :9/2=4 但是 :9/2 ...
- 知方可补不足~sqlserver中对xml类型字段的操作
回到目录 在sqlserver中有很多种数据类型,而XML数据类型是比较新奇怪的一种格式,我们平常接触的可能比较少,用的也少,而在某些场合,使用XML类型可能会使我们的开发变简单,下面就是一种情况: ...
- Lambda语句中创建自定义类型时,也可指定某种特定类型,方法是在new与{}之间写上类型名称
如: var fc =...ChildFath = fc.Select(c => new Child_Father { child = c.child, father = c.father }) ...
- sqlserver中对时间类型的字段转换
获取当前日期利用 convert 来转换成我们需要的datetime格式. select CONVERT(varchar(12) , getdate(), 112 ) 20040912-------- ...
- 当向计算机中存入一个float类型的数值2.2 后,在从计算机中读出输出,这时2.2 的值已经发生了变化(转)
problom : 'f1' value hava been changed when output. reason : the binary repersentation of 2.2f is : ...
- SQLSERVER中的假脱机spool
SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...
随机推荐
- idea在debug模式启动非常慢,日志正常debug模式一直在启动中状态
背景 最近在使用idea开发工具时遇到了一个奇怪的现象,使用run tomcat项目可以正常启动,但是使用debug模式启动时,控制台可以正常打印日志,但是进度十分缓慢,也没有任何报出任何错误信息.只 ...
- java面试数据类型
1. Java的数据类型? 2. Java的封装类型? 3. 基本类型和封装类型的区别? 基本类型只能按值传递,而对应的封装类是按引用传递的. 基本类型是在堆栈上创建的,而所有的对象类型都是在堆上创建 ...
- 八皇后II
用一个数组state记录已经选择的每一行皇后所在的位置,DFS count = 0 N = 8 state = [0]*N def dfs(row): global count for col in ...
- Form与ModelForm-下拉框或者多选注意//及字段补充
一.Form 设计一张普通model表: class UserInfo(models.Model): name = models.CharField(verbose_name='员工姓名', max_ ...
- Java实现杨辉三角形
Java实现杨辉三角形 一.源代码:YFTriangle.java package cn.com.zfc.day009; import java.util.Scanner; /** * 打印杨辉三角形 ...
- 搭建Nexus本地仓库
1 下载nexus安装包 网址:http://www.sonatype.org/nexus/ 建议下载最新的版本,最新的版本支持比较新的jdk版本, 1.6 肯定是不行的,必须是1.7及其以上. ...
- Set常用子类特点
HashSet: 重写 hashCode和equals方法 特点:无序,唯一 底层结构是: ...
- Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步
Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.
- MVC实现文件下载
□ 思路 点击一个链接,把该文件的Id传递给控制器方法,遍历文件夹所有文件,根据ID找到对应文件,并返回FileResult类型. 与文件相关的Model: namespace MvcApplicat ...
- merge into优化sql(转)
使用Merge INTO优化SQL,性能提升巨大 分类: Oracle 2017-04-13 10:55:07 说说背景:开发有个需求,需要对新加的一个字段根据特定的业务逻辑更新数据.TPS_TR ...