Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用点替换逗号将值四舍五入并删除小数_Sql_Sql Server_Sql Server 2016 - Fatal编程技术网

Sql 用点替换逗号将值四舍五入并删除小数

Sql 用点替换逗号将值四舍五入并删除小数,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,我想把逗号改成点。在具有值的行中,但执行此操作时,该值仅舍入两位小数 因此值[LineAmount]通常返回,例如:1389344 但是,在执行REPLACE[LineAmount]、、、、、时,该值将更改为1389.34 只有当值有3位小数(2或1)时,才会发生这种情况,因为替换操作正确 我错过了什么?在替换之前,我尝试将值转换为varchar或decimal,但同样的情况也发生了 我只需要把逗号改成一个点,别的什么都不需要 提前谢谢。真正的问题有两个方面: 您认为数字数据类型具有格式数据;他

我想把逗号改成点。在具有值的行中,但执行此操作时,该值仅舍入两位小数

因此值[LineAmount]通常返回,例如:1389344

但是,在执行REPLACE[LineAmount]、、、、、时,该值将更改为1389.34

只有当值有3位小数(2或1)时,才会发生这种情况,因为替换操作正确

我错过了什么?在替换之前,我尝试将值转换为varchar或decimal,但同样的情况也发生了

我只需要把逗号改成一个点,别的什么都不需要

提前谢谢。

真正的问题有两个方面:

您认为数字数据类型具有格式数据;他们没有。 您使用的是浮点数据类型,当它失去精度时,您会感到不安,尽管当您将值定义为浮点时,您说您对这种行为感到满意。 因此,解决方案很简单,使用十进制/数字数据类型存储数据,因此不会出现舍入问题。然后,如果需要对值进行格式化,请在表示层而不是RDBMS中进行格式化。替换{Numerical Data Type},“,”,“.”不会做任何有意义的事情,因为数值数据类型不是字符串;他们不像他们那样工作


如何在表示层中实现格式是一个完全不同的问题,因为这取决于用于构建所述表示层的工具。

Pust a full。我不能重复你的问题。然而,真正的问题似乎是将数字数据存储为字符串。列数据类型?@jarlh Valid question。猜测列的数据类型是decimalx,2。猜测列的数据类型是decimalx,2如果是@Dr.Casual,它永远不会有值“1389344”。浮点值没有逗号;这是你的第一个问题。替换{FloatValue},,,,,,,,,,,将不会做任何有意义的事情。接下来,float是一种不精确的数据类型,所以您实际上已经声明了您对使用该类型导致的数据丢失感到满意。2节课;1数字数据类型没有格式,因此不能用句点替换逗号。2.如果您想要精确的值,并且不想遇到这样的舍入问题,请不要使用float。问题是此数据库非常旧,不是我设置的,因此现在无法更改数据类型flotat。这就是为什么我一直在寻找一个解决方案来实现它。如果SQL Server不能为我做到这一点,我会像你说的那样尝试在表示层中使用。但这不会改变我的答案,@Nanaki。第1点仍然有效,数字数据没有格式,因此替换逗号毫无意义;可能我只是不明白,因为我不是SQL专家,但将其更改为字符串也会删除值,为什么?24859296>float/24859.3>nvarcharWelcome使用不精确的数据类型,@Nanaki。同样,当您将该值定义为浮点值时,您说您对这种行为感到满意。