防止 python3 中数字的自动科学形式
Preventing auto scientific form for numbers in python3
是否可以在计算时不分配scientific/standard表格编号?
例如,现在我的代码中的一行有:
数字 = 10**23 * 1.1
应该评估为 110000000000......0 或其他什么,而不是我分配 1.1e+23 这非常烦人,因为我试图将 IEEE754 转换为十进制并打印出特定的东西但它不会由于 1.1e+23
的科学计数法而工作
我试过环顾四周,但没有简单简洁的答案
默认情况下您无法更改此设置。如果指数大于浮点数的精度,则显示浮点数时的默认行为始终移动到科学记数法。
改变它的唯一方法是明确以另一种方式格式化它。如果您知道显示数字的精度,可以使用 format
:
>>> number
1.1e+23
>>> format(number, 'f')
'110000000000000004194304.000000'
>>> format(number, '.0f')
'110000000000000004194304'
您也可以将其与格式字符串一起使用:
>>> 'The number is {:.0f}'.format(number)
'The number is 110000000000000004194304'
如果您的目标是将浮点数转换为整数,那么您应该这样做。整数具有无限精度,因此不使用科学记数法显示。例如,您可以 round
或截去小数点后的数字:
>>> round(number)
110000000000000004194304
>>> int(number)
110000000000000004194304
对于高精度小数,可以使用Decimal
类型。它允许小数具有任意精度:
>>> from decimal import Decimal
>>> d = 10**23 * Decimal('1.1')
>>> d
Decimal('110000000000000000000000.0')
>>> int(d)
110000000000000000000000
def number(n):
"""
如果小于1,只保留4位有效数字
如果大于1,保留小数点后2位
"""
if n < 1:
n = '{:.4g}'.format(n)
else:
n = '{:.2f}'.format(n)
if 'e-' in n:
a, b = n.split('e-')
a = a.replace('.', '')
b = int(b)
return '0.' + '0' * (b - 1) + a
else:
return n
上面的例子,如果小于1,我保留4位有效数字,如果大于1,我保留小数点前所有数字,小数点后保留2位。它非常适合显示加密货币的价格 ;)
In [61]: number(0.00000123456)
Out[61]: '0.000001235'
In [62]: number(47740.3413)
Out[62]: '47740.34'
是否可以在计算时不分配scientific/standard表格编号?
例如,现在我的代码中的一行有: 数字 = 10**23 * 1.1
应该评估为 110000000000......0 或其他什么,而不是我分配 1.1e+23 这非常烦人,因为我试图将 IEEE754 转换为十进制并打印出特定的东西但它不会由于 1.1e+23
的科学计数法而工作我试过环顾四周,但没有简单简洁的答案
默认情况下您无法更改此设置。如果指数大于浮点数的精度,则显示浮点数时的默认行为始终移动到科学记数法。
改变它的唯一方法是明确以另一种方式格式化它。如果您知道显示数字的精度,可以使用 format
:
>>> number
1.1e+23
>>> format(number, 'f')
'110000000000000004194304.000000'
>>> format(number, '.0f')
'110000000000000004194304'
您也可以将其与格式字符串一起使用:
>>> 'The number is {:.0f}'.format(number)
'The number is 110000000000000004194304'
如果您的目标是将浮点数转换为整数,那么您应该这样做。整数具有无限精度,因此不使用科学记数法显示。例如,您可以 round
或截去小数点后的数字:
>>> round(number)
110000000000000004194304
>>> int(number)
110000000000000004194304
对于高精度小数,可以使用Decimal
类型。它允许小数具有任意精度:
>>> from decimal import Decimal
>>> d = 10**23 * Decimal('1.1')
>>> d
Decimal('110000000000000000000000.0')
>>> int(d)
110000000000000000000000
def number(n):
"""
如果小于1,只保留4位有效数字
如果大于1,保留小数点后2位
"""
if n < 1:
n = '{:.4g}'.format(n)
else:
n = '{:.2f}'.format(n)
if 'e-' in n:
a, b = n.split('e-')
a = a.replace('.', '')
b = int(b)
return '0.' + '0' * (b - 1) + a
else:
return n
上面的例子,如果小于1,我保留4位有效数字,如果大于1,我保留小数点前所有数字,小数点后保留2位。它非常适合显示加密货币的价格 ;)
In [61]: number(0.00000123456)
Out[61]: '0.000001235'
In [62]: number(47740.3413)
Out[62]: '47740.34'