[英]Nodejs mssql/msnodesqlv8 issue sending semicolon in database request
[英]Nodejs to MSSQL decimal digits issue
我正在使用使用Node.js的回送框架开发的应用程序。 我需要从csv读取数据并将其保存在我的SQL Server数据库中(我正在使用SQL Server 2014实例)。 csv文件的一列包含带有16个十进制数字的数字。 我从csv文件中读取它们没有问题,但是当我将它们保存在数据库中时,它将更改最后一个十进制数字。 例如,csv的第一行的值为“ 0.0059888523696288”,但是在数据库中我找到的是“ 0.0059888525865972”。
我在我的JavaScript代码中做了一个console.log来检查数字并正确打印,所以我猜想问题是在数据库读取数据时发生的。
这是在我的javascript模型中映射的属性的定义:
"forecast": {
"type": "Number",
"required": true,
"length": null,
"precision": 53,
"scale": null,
"mssql": {
"columnName": "forecast",
"dataType": "float",
"dataLength": null,
"dataPrecision": 53,
"dataScale": null,
"nullable": "NO"
}
}
我尝试将数据库表中列的定义更改为十进制(18,16),并相应地将模型中的列定义更改为十进制,然后再次执行插入操作,但得到的结果相同。
关于此行为的任何解释以及如何在数据库上获取正确的数字?
编辑:
我按照注释中的建议进行了更多日志记录,这是一个输出示例:
从csv读取的值:0.0045747027551005
存储在另一个js变量中的值:0.0045747027551005
连接器输出:
loopback:connector:mssql SQL:
DECLARE @insertedIds TABLE (id INT)
INSERT INTO [dbo].[PLAN]([plan],[period],[forecast]) OUTPUT INSERTED.[id] into @insertedIds VALUES(@param1,@param2,@param3)
SELECT id AS insertId from @insertedIds
Parameters: [137,17,0.0045747027551005] +3ms
存储在db上的值:0.0045747025869787
即使将列更改为十进制(28,16),我也得到相同的输出。 这很奇怪。
您正在SQL Server中使用Float数据类型,该数据类型是从-1.79E + 308到1.79E + 308的浮点精度数字数据。因此,它不是精确的。
您应该使用Decimal,它是固定的精度和小数位数值数据类型。
您也可以指定小数位数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.