gpt4 book ai didi

SQL Server - float 与 varchar

转载 作者:行者123 更新时间:2023-12-02 09:07:00 25 4
gpt4 key购买 nike

在 SQL Server 中,我将十进制数据存储在表中(从不用于连接或过滤)。此十进制数据是可变的 - 80% 的时间它具有单个数字值(1、4、5),其余 20% 具有 16 位小数(0.8999999761581421、3.0999999046325684)。

我想知道是否可以使用 varchar 而不是 float 节省任何存储空间,或者我是否应该坚持使用 float,因为这样是数字数据吗?

最佳答案

这是一个有趣的观察:

从数学值0.9

开始

将其转换为二进制数。出于同样的原因,1/3 不能用以 10 为底的有限位数表示,数字 0.9 也不能用以 2 为底的有限位数表示。确切的数学值是:

0.1 1100 1100 1100 1100 1100 1100 1100 ...“1100”永远重复。

让我们将此值存储在 IEEE-754 单精度浮点值中。 (在 SQL Server 中,这称为 REAL 类型)。为此,我们必须舍入到 23 个有效位。结果是:

0.1 1100 1100 1100 1100 1100 11 

将其转换为精确的十进制等效值,您会得到:

0.89999997615814208984375

将其四舍五入到小数点后 16 位。你得到:

0.8999999761581421

这恰好是您作为示例显示的值。

如果你对 3.1 做同样的事情,你会得到 3.0999999046325684

有没有可能你所有的输入都是简单的小数点后一位数字,已经存储为浮点值,然后转换回十进制?

关于SQL Server - float 与 varchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57115376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com