diff --git a/index.js b/index.js index 48f133d..5f367db 100644 --- a/index.js +++ b/index.js @@ -48,7 +48,12 @@ function fromCSV ({ data, file, separator = ',', headerFields, overrideExistingH const row = split(line, separator) const obj = {} for (const i in headers) { - obj[headers[i]] = (parseFloats && !isNaN(row[i])) ? parseFloat(row[i]) : row[i] + let val = row[i] + if (parseFloats && !isNaN(val)) { + const floatVal = parseFloat(val) + if (floatVal.toString() === row[i]) val = floatVal + } + obj[headers[i]] = val } out.push(obj) } diff --git a/test/basic.test.js b/test/basic.test.js index efbde29..52e6561 100644 --- a/test/basic.test.js +++ b/test/basic.test.js @@ -46,6 +46,14 @@ describe('basic', () => { assert.deepStrictEqual(json, [{ a: 'hello', b: 'world', c: 3.14159 }]) }) + it('NOT parses bad floats', () => { + const json = dumbcsv + .fromCSV({ data: '436E0248,3.141592653589793238462643383279502884197,3.14159', headerFields: ['a', 'b', 'c'] }) + .toJSON() + console.log(json) + assert.deepStrictEqual(json, [{ a: '436E0248', b: '3.141592653589793238462643383279502884197', c: 3.14159 }]) + }) + it('NOT parses floats', () => { const json = dumbcsv .fromCSV({ data: 'hello,world,3.14159', headerFields: ['a', 'b', 'c'], parseFloats: false })