首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MSSQL2008中实现高精度的数值存储?

问如何在MSSQL2008中实现高精度的数值存储?
EN

Stack Overflow用户
提问于 2013-01-11 18:51:45
回答 4查看 766关注 0票数 0

我在VisualStudio端有双精度类型值。

我需要将这个值存储在MSSQL2008中的浮点列类型中。

问题是我的值的精度是点后的17位数,

在SQL端,最后几个数字是截取和舍入的。

你知道如何让SQL服务器保持原样(也就是不改变最后一位数)吗?

提前谢谢你!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-11 19:20:35

.Net Double和MSSQL server float是近似的数字数据类型。

它们提供了一种存储"real"编号的有效方法。在内部,它们被存储为两个精确的二进制数,基数(马蒂萨)和乘数(指数)。其精度根据这两个精确二进制数的相对大小而变化,特别是尾数。使用这些floating point numbers的操作在现代处理器上得到了优化,尤其是GPU。

在数字的小端,并不是范围内的每个实数都有二进制值。当用于存储数字的各个比率不同时,这些间隙是交错的,并且在比率之间转换数字时会产生很小的舍入误差。对于浮点数,就是这样。当使用浮点数来表示自然数据时,任何一种方式都没有太大的区别。

如果您确实需要额外的精度,则应该使用MSSQL decimal或numeric以及.Net Decimal类型。然而,与浮点数相比,它们占用更多的空间,并且性能较低。

票数 2
EN

Stack Overflow用户

发布于 2013-01-11 19:00:13

使用Decimal数据类型而不是float。

下面是一个例子

代码语言:javascript
复制
DECIMAL(30, 17)

30 =最大小数位总数

17 =小数点右侧可存储的最大小数位数。

更多关于这方面的信息

http://msdn.microsoft.com/en-us/library/aa258832(v=sql.80).aspx

票数 3
EN

Stack Overflow用户

发布于 2013-01-11 18:58:38

FLOAT并不准确。为了提高精度,您应该将它们存储为DB上的DECIMAL / NUMERIC。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14276571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档