带有十进制数的node.js数字和knex中的舍入
在我的postgres表中,我有一个numeric (30,16)
types的字段numeric (30,16)
,其中存储了许多小数的数字。 我需要计算这些数字。
我使用knex
,默认情况下,它返回这些值作为String
所以为了有号码,我试过了:
var types = require('pg').types types.setTypeParser(1700, 'text', parseFloat);
然而,这仍然是行不通的,例如从488.1456218300001000
和我减去300
我可以得到类似于188.1456218300001500
。
我需要做什么在node.js正确处理操作没有任何舍入错误?
您遇到的问题与knex或Postgres无关,只是JavaScript数字的工作原理 – 它们的精度不足以处理十进制数字。
你可以在这个相关的SO问题上find更多的信息。
正如评论中所build议的那样,如果您真的需要更高的精度,您可以使用big.js这样的库。
你可以在这个小提琴中看到它是如何工作的,看看这个代码示例:
const Big = require('big.js'); const a = 400.12345678901234567890; console.log(a - 300); // 100.12345678901232 :-( const b = new Big('400.12345678901234567890'); console.log(b.minus(300).toString()); // 100.1234567890123456789 :-)