我需要在PostgreSQL数据库中存储12个数字和6个小数的值。根据PostgreSQL,它提供了数值数据类型。我使用numeric(18,6)
创建了一个字段,但是当我输入值时,它只接受15位数值。
例如 如果我尝试存储号码123456789123.123456,它会截断数字并仅存储123456789123.123。
在JavaScript中,当我尝试解析包含6位小数的18位数字符串时,它只返回17位数,12位数和5位小数。
例如
var number = "123456789123.123456"
console.log(parseFloat(number));
它仅打印123456789123.12346
对此有什么解决方法吗?
答案 0 :(得分:1)
这是双精度浮点数据类型的限制,并不是JavaScript或Postgres独有的。 Postgres可以使用相同的双精度浮点类型,或者,如您所做的那样,支持以不同格式存储的任意精度数。
JavaScript只有一种数字数据类型:双精度浮点。
请注意,这是精度限制,而不是" 17位"。您可以成功存储0.0000000000000003939393928293
或8949493210129000000000000000000000000000
。
如果需要使用更高精度的数字,可以使用像bignumber.js这样的库。您失去了使用简单运算符的能力,因此num3 = num1 + num2
变为num3 = num1.plus(num2)
,但它应该满足您的需求。