SQL Server货币数据类型问题

SQL Server货币数据类型问题,sql,sql-server-2000,types,Sql,Sql Server 2000,Types,我们有一个SQL Server 2000数据库,其中包含货币数据类型列,并且货币列中的数字存在奇怪的问题,我们在其中存储的数字有两位小数。很长一段时间,一切都很好。但现在我看到在一些行中,原来是47.22,现在是47.2178。当我选择CASTCOLUMN作为CHAR时,结果是47.22,但当我从ADO记录集中检索值时,结果是47.2178。我浏览所有的应用程序,若有任何地方它可以写入小数点后4位的数字,但找不到任何东西,并且在应用程序历史记录中有应用程序将47.22写入数据库的记录。这可能是S

我们有一个SQL Server 2000数据库,其中包含货币数据类型列,并且货币列中的数字存在奇怪的问题,我们在其中存储的数字有两位小数。很长一段时间,一切都很好。但现在我看到在一些行中,原来是47.22,现在是47.2178。当我选择CASTCOLUMN作为CHAR时,结果是47.22,但当我从ADO记录集中检索值时,结果是47.2178。我浏览所有的应用程序,若有任何地方它可以写入小数点后4位的数字,但找不到任何东西,并且在应用程序历史记录中有应用程序将47.22写入数据库的记录。这可能是SQL Server的问题吗


编辑:应用程序是用VB6编写的,您实际使用的是货币数据类型还是浮点类型

使用enterprise manager从该表中进行选择时会发生什么情况?一切看起来都好吗

我猜您正在将数据转换为浮点类型。可能在ADO代码中

更新

:当将钱掷到字符串类型时,机器的区域设置将起作用。这就是它被四舍五入到小数点后2位的原因

你有三个选择

首先将money类型转换为等效的十进制数,然后将结果转换为char 将机器区域设置更改为所需的默认格式。 首先不要使用money数据类型,只使用十进制。
您实际使用的是货币数据类型还是浮点类型

使用enterprise manager从该表中进行选择时会发生什么情况?一切看起来都好吗

我猜您正在将数据转换为浮点类型。可能在ADO代码中

更新

:当将钱掷到字符串类型时,机器的区域设置将起作用。这就是它被四舍五入到小数点后2位的原因

你有三个选择

首先将money类型转换为等效的十进制数,然后将结果转换为char 将机器区域设置更改为所需的默认格式。 首先不要使用money数据类型,只使用十进制。
不要使用Enterprise Manager对表中实际存储的内容得出任何结论。EM有时对如何解释数据有自己的看法

查看您的CAST…。查找CAST和CONVERT…文档中解释了原因

下表显示了这些值 对于可用于 将货币或小额货币转换为 字符数据

价值产出 0默认无逗号 每三个数字到左边的 小数点,并将两位数字 小数点的右边;对于 例如,4235.98

每小时1个逗号 文本左侧的三位数字 小数点,并将两位数字 小数点的右边;对于 例如,3510.92

2无逗号 每三个数字到左边的 小数点和四位数字到 小数点的右边;对于 例如,4235.9819


编辑:终于了解了如何使用BlockQuote功能:-

不要使用Enterprise Manager对表中实际存储的内容得出任何结论。EM有时对如何解释数据有自己的看法

查看您的CAST…。查找CAST和CONVERT…文档中解释了原因

下表显示了这些值 对于可用于 将货币或小额货币转换为 字符数据

价值产出 0默认无逗号 每三个数字到左边的 小数点,并将两位数字 小数点的右边;对于 例如,4235.98

每小时1个逗号 文本左侧的三位数字 小数点,并将两位数字 小数点的右边;对于 例如,3510.92

2无逗号 每三个数字到左边的 小数点和四位数字到 小数点的右边;对于 例如,4235.9819


编辑:终于了解了如何使用BlockQuote功能:-

你能发布检索记录集的代码吗?不,这可能不是SQL Server的问题-经典SQL代码,记录集:从表中选择列,条件是,但是,为什么CAST只返回2位小数?嗯,CAST转换为字符串服务器端。如果看不到它,就很难知道代码是做什么的,或者钱->字符串转换是在哪里进行的。您可以发布检索记录集的代码吗?不,这可能不是SQL Server的问题-经典SQL代码,记录集:从表中选择列,条件是,但是,为什么CAST只返回2位小数?嗯,CAST转换为字符串服务器端。如果看不到它,很难判断代码的作用,或者货币->字符串转换在哪里。我们使用货币数据类型,enterprise manager返回4位小数。您知道这4位小数是如何显示的吗
r以DB表示,因为从应用程序来看,它们确实可以将舍入误差从47.22舍入到47.2178,这似乎很大,可以用浮点近似来解释?我同意,从47.22舍入到47.2178不太可能是精度问题。应用程序不是sql server如何处理数据类型的?它是使用浮点还是十进制?还有,它是计算列吗?应用程序在存储数据之前是否对数据执行数学运算?我们使用MONEY数据类型,enterprise manager返回4位小数。您知道这4位小数如何显示在DB中吗,因为从应用上看,他们真的可以“从47.22到47.2178的舍入误差似乎很大,可以用浮点近似来解释吗?我同意,从47.22到47.2178的舍入误差不太可能是精度问题。应用程序不是sql server如何处理数据类型的?它是使用浮点还是十进制?还有,它是计算列吗?应用程序在存储数据之前是否对数据执行数学运算?