使用包含十进制数据类型的数据库时如何避免使用科学记数法
How to avoid scientific notation when using databases containing decimal datatype
我有一个很大的字典,其中包含很多小数数据类型。其中许多值都非常小,打印时以科学记数法显示。
如何在不单独打印每条数据的情况下让字典打印为普通小数?谢谢
from decimal import Decimal
dic = {'value1': Decimal('0.000000123'), 'value2' : Decimal('0.00000001'),
'value3' : Decimal('0.00000000000001')}
# This happens which I don't want:
print(dic)
>> {'value1': Decimal('1.23E-7'), 'value2': Decimal('1E-8'),
'value3': Decimal('1E-14')}
# I want:
print(dic)
>> {'value1': Decimal('0.000000123'), 'value2' : Decimal('0.00000001'),
'value3' : Decimal('0.00000000000001')}
我不能对每个项目单独使用 {0:.8f}.format(val) 或类似的东西,因为有成千上万的项目,所以我如何在没有科学记数法的情况下打印值?也许在创建小数点时?谢谢
编辑:字典中还有其他数据类型,例如字符串,因此解决方案不会受此影响。
如果真的只是为了看你的价值观,那么你可以这样做:
import numbers
# Include isinstance() to check that your value is numeric
print(['{}: {:.14f}'.format(k,i) for k,i in dic.items()
if isinstance(i, numbers.Number)])
哪个returns:
['value1: 0.00000012300000', 'value2: 0.00000001000000', 'value3: 0.00000000000001']
或者,如果您仍想打印 non-numeric 值(只是未格式化),请使用:
print(['{}: {:.14f}'.format(k,i) if isinstance(i, numbers.Number)
else '{}: {}'.format(k,i) for k,i in dic.items()])
示例:
dic = {'value1': Decimal('0.000000123'), 'value2' : Decimal('0.00000001'),
'value3' : Decimal('0.00000000000001'), 'value4': 'string'}
print(['{}: {:.14f}'.format(k,i) if isinstance(i, numbers.Number)
else '{}: {}'.format(k,i) for k,i in dic.items()])
returns:
['value1: 0.00000012300000', 'value2: 0.00000001000000', 'value3: 0.00000000000001', 'value4: string']
但是正如您所指出的,这仅适用于查看您的值,因为它们作为键和值组合的字符串返回。
注意:
我使用 {:.14f}
因为你的最小小数是 E-14
的顺序
我有一个很大的字典,其中包含很多小数数据类型。其中许多值都非常小,打印时以科学记数法显示。 如何在不单独打印每条数据的情况下让字典打印为普通小数?谢谢
from decimal import Decimal
dic = {'value1': Decimal('0.000000123'), 'value2' : Decimal('0.00000001'),
'value3' : Decimal('0.00000000000001')}
# This happens which I don't want:
print(dic)
>> {'value1': Decimal('1.23E-7'), 'value2': Decimal('1E-8'),
'value3': Decimal('1E-14')}
# I want:
print(dic)
>> {'value1': Decimal('0.000000123'), 'value2' : Decimal('0.00000001'),
'value3' : Decimal('0.00000000000001')}
我不能对每个项目单独使用 {0:.8f}.format(val) 或类似的东西,因为有成千上万的项目,所以我如何在没有科学记数法的情况下打印值?也许在创建小数点时?谢谢
编辑:字典中还有其他数据类型,例如字符串,因此解决方案不会受此影响。
如果真的只是为了看你的价值观,那么你可以这样做:
import numbers
# Include isinstance() to check that your value is numeric
print(['{}: {:.14f}'.format(k,i) for k,i in dic.items()
if isinstance(i, numbers.Number)])
哪个returns:
['value1: 0.00000012300000', 'value2: 0.00000001000000', 'value3: 0.00000000000001']
或者,如果您仍想打印 non-numeric 值(只是未格式化),请使用:
print(['{}: {:.14f}'.format(k,i) if isinstance(i, numbers.Number)
else '{}: {}'.format(k,i) for k,i in dic.items()])
示例:
dic = {'value1': Decimal('0.000000123'), 'value2' : Decimal('0.00000001'),
'value3' : Decimal('0.00000000000001'), 'value4': 'string'}
print(['{}: {:.14f}'.format(k,i) if isinstance(i, numbers.Number)
else '{}: {}'.format(k,i) for k,i in dic.items()])
returns:
['value1: 0.00000012300000', 'value2: 0.00000001000000', 'value3: 0.00000000000001', 'value4: string']
但是正如您所指出的,这仅适用于查看您的值,因为它们作为键和值组合的字符串返回。
注意:
我使用 {:.14f}
因为你的最小小数是 E-14