diff options
author | Michael Trier <mtrier@gmail.com> | 2009-01-22 01:55:06 +0000 |
---|---|---|
committer | Michael Trier <mtrier@gmail.com> | 2009-01-22 01:55:06 +0000 |
commit | a7459fe1abaec1c4d6aca443e7b7e5f1d1e6db21 (patch) | |
tree | 897cb9669f76cd360d104d26cc678f4f90cf1f05 /lib/sqlalchemy/databases/mssql.py | |
parent | 52e2c2d916fb45d8169d6b273db2b39b0fc8ccee (diff) | |
download | sqlalchemy-a7459fe1abaec1c4d6aca443e7b7e5f1d1e6db21.tar.gz |
Trying one more time to get the decimal handling on mssql right. Closes #1282.
Diffstat (limited to 'lib/sqlalchemy/databases/mssql.py')
-rw-r--r-- | lib/sqlalchemy/databases/mssql.py | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index 1a3c20a07..ddd130679 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -328,17 +328,35 @@ class MSNumeric(sqltypes.Numeric): if value is None: # Not sure that this exception is needed return value - else: - if isinstance(value, decimal.Decimal): - sign = (value < 0 and '-' or '') - if value._exp > -1: - return float(sign + value._int + '0' * value._exp) - else: - s = value._int.zfill(-value._exp+1) - pos = len(s) + value._exp - return sign + s[:pos] + '.' + s[pos:] + + elif isinstance(value, decimal.Decimal): + if value.adjusted() < 0: + result = "%s0.%s%s" % ( + (value < 0 and '-' or ''), + '0' * (abs(value.adjusted()) - 1), + "".join([str(nint) for nint in value._int])) + else: - return value + if 'E' in str(value): + result = "%s%s%s" % ( + (value < 0 and '-' or ''), + "".join([str(s) for s in value._int]), + "0" * (value.adjusted() - (len(value._int)-1))) + else: + if (len(value._int) - 1) > value.adjusted(): + result = "%s%s.%s" % ( + (value < 0 and '-' or ''), + "".join([str(s) for s in value._int][0:value.adjusted() + 1]), + "".join([str(s) for s in value._int][value.adjusted() + 1:])) + else: + result = "%s%s" % ( + (value < 0 and '-' or ''), + "".join([str(s) for s in value._int][0:value.adjusted() + 1])) + + return result + + else: + return value return process |