diff --git a/src/convert.js b/src/convert.js index 8bb5e7a..c58b676 100644 --- a/src/convert.js +++ b/src/convert.js @@ -16,13 +16,15 @@ export function convert(data, schemaElement) { return data.map(v => v && decoder.decode(v)) } if (ctype === 'DECIMAL') { - const scaleFactor = schemaElement.scale ? Math.pow(10, schemaElement.scale) : 1 + const scale = schemaElement.scale || 0 + const precision = schemaElement.precision || 0 + const factor = Math.pow(10, scale - precision) if (typeof data[0] === 'number') { - return scaleFactor === 1 ? data : data.map(v => v * scaleFactor) + return factor === 1 ? data : data.map(v => v * factor) } else if (typeof data[0] === 'bigint') { - return scaleFactor === 1 ? data : data.map(v => v * BigInt(scaleFactor)) + return factor === 1 ? data : data.map(v => v * BigInt(factor)) } else { - return data.map(v => parseDecimal(v) * scaleFactor) + return data.map(v => parseDecimal(v) * factor) } } if (ctype === 'DATE') { diff --git a/test/files/byte_array_decimal.json b/test/files/byte_array_decimal.json index 7ce1ae6..7427451 100644 --- a/test/files/byte_array_decimal.json +++ b/test/files/byte_array_decimal.json @@ -1,26 +1,26 @@ [ - [ 10000 ], - [ 20000 ], - [ 30000 ], - [ 40000 ], - [ 50000 ], - [ 60000 ], - [ 70000 ], - [ 80000 ], - [ 90000 ], - [ 100000 ], - [ 110000 ], - [ 120000 ], - [ 130000 ], - [ 140000 ], - [ 150000 ], - [ 160000 ], - [ 170000 ], - [ 180000 ], - [ 190000 ], - [ 200000 ], - [ 210000 ], - [ 220000 ], - [ 230000 ], - [ 240000 ] + [ 1 ], + [ 2 ], + [ 3 ], + [ 4 ], + [ 5 ], + [ 6 ], + [ 7 ], + [ 8 ], + [ 9 ], + [ 10 ], + [ 11 ], + [ 12 ], + [ 13 ], + [ 14 ], + [ 15 ], + [ 16 ], + [ 17 ], + [ 18 ], + [ 19 ], + [ 20 ], + [ 21 ], + [ 22 ], + [ 23 ], + [ 24 ] ]