Skip to content

Commit d48271b

Browse files
removed normalize() from singer.decimal to avoid scientific notation (#146)
Co-authored-by: Zach Harris <zharris@talend.com>
1 parent 2f618c6 commit d48271b

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

singer/transform.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,15 +278,15 @@ def _transform(self, data, typ, schema, path):
278278

279279
if isinstance(data, (str, float, int)):
280280
try:
281-
return True, str(decimal.Decimal(str(data)).normalize())
281+
return True, str(decimal.Decimal(str(data)))
282282
except:
283283
return False, None
284284
elif isinstance(data, decimal.Decimal):
285285
try:
286286
if data.is_snan():
287287
return True, 'NaN'
288288
else:
289-
return True, str(data.normalize())
289+
return True, str(data)
290290
except:
291291
return False, None
292292

tests/test_transform.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,24 +279,28 @@ def test_decimal_types_transform(self):
279279
self.assertEquals(str1, transform(str1, schema))
280280
self.assertEquals({'percentage': '1E-13'}, transform(str2, schema))
281281
self.assertEquals({'percentage': '1E+13'}, transform(str3, schema))
282-
self.assertEquals({'percentage': '1E+2'}, transform(str4, schema))
283-
self.assertEquals({'percentage': '-1E+2'}, transform(str5, schema))
282+
self.assertEquals({'percentage': '100'}, transform(str4, schema))
283+
self.assertEquals({'percentage': '-100'}, transform(str5, schema))
284284

285285
float1 = {'percentage': 12.0000000000000000000000000001234556}
286286
float2 = {'percentage': 0.0123}
287287
float3 = {'percentage': 100.0123}
288288
float4 = {'percentage': -100.0123}
289-
self.assertEquals({'percentage':'12'}, transform(float1, schema))
289+
float5 = {'percentage': 0.000001}
290+
float6 = {'percentage': 0.0000001}
291+
self.assertEquals({'percentage':'12.0'}, transform(float1, schema))
290292
self.assertEquals({'percentage':'0.0123'}, transform(float2, schema))
291293
self.assertEquals({'percentage':'100.0123'}, transform(float3, schema))
292294
self.assertEquals({'percentage':'-100.0123'}, transform(float4, schema))
295+
self.assertEquals({'percentage':'0.000001'}, transform(float5, schema))
296+
self.assertEquals({'percentage':'1E-7'}, transform(float6, schema))
293297

294298
int1 = {'percentage': 123}
295299
int2 = {'percentage': 0}
296300
int3 = {'percentage': -1000}
297301
self.assertEquals({'percentage':'123'}, transform(int1, schema))
298302
self.assertEquals({'percentage':'0'}, transform(int2, schema))
299-
self.assertEquals({'percentage':'-1E+3'}, transform(int3, schema))
303+
self.assertEquals({'percentage':'-1000'}, transform(int3, schema))
300304

301305
dec1 = {'percentage': decimal.Decimal('1.1010101')}
302306
dec2 = {'percentage': decimal.Decimal('.111111111111111111111111')}
@@ -305,7 +309,7 @@ def test_decimal_types_transform(self):
305309
self.assertEquals({'percentage':'1.1010101'}, transform(dec1, schema))
306310
self.assertEquals({'percentage':'0.111111111111111111111111'}, transform(dec2, schema))
307311
self.assertEquals({'percentage':'-0.111111111111111111111111'}, transform(dec3, schema))
308-
self.assertEquals({'percentage':'1E+2'}, transform(dec4, schema))
312+
self.assertEquals({'percentage':'100'}, transform(dec4, schema))
309313

310314
bad1 = {'percentage': 'fsdkjl'}
311315
with self.assertRaises(SchemaMismatch):

0 commit comments

Comments
 (0)