Python f字符串(PEP 498)有一个简单的方法来修复小数点后的位数吗?(特别是f-strings,而不是其他字符串格式化选项,如.format或%)
例如,假设我想在小数位后面显示2位数.
我怎么做?
a = 10.1234
f'{a:.2}'
Out[2]: '1e+01'
f'{a:.4}'
Out[3]: '10.12'
a = 100.1234
f'{a:.4}'
Out[5]: '100.1'
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,"精度"已经改变了"小数点后的位数"的含义,就像使用%格式时的情况一样,只是总数.无论我有多大的数字,我怎么能总是得到小数点后的2位数?
这是困扰我的例子:
>>> x = decimal.Decimal('0.0001')
>>> print x.normalize()
>>> print x.normalize().to_eng_string()
0.0001
0.0001
Run Code Online (Sandbox Code Playgroud)
有没有办法用表示mili(10e-3)和micro(10e-6)的工程符号?
如何获得以下格式(输入值始终小于 0.1):
> formatting(0.09112346)
0.91123E-01
> formatting(0.00112346)
0.11234E-02
Run Code Online (Sandbox Code Playgroud)
等等。
我正在寻找一些优雅的解决方案。我已经在使用下面给出的自定义函数:
def formatting(x, prec=5):
tup = x.as_tuple()
digits = list(tup.digits[:prec])
dec = ''.join(str(i) for i in digits)
exp = x.adjusted()
return '0.{dec}E{exp}'.format(dec=dec, exp=exp)
Run Code Online (Sandbox Code Playgroud) 我的管理页面中有一个字段,希望以科学计数法显示。
现在,它显示出这样难看的东西。如何将其显示为4.08E + 13?

现在,我在模型中使用标准的十进制字段。
任何意见是极大的赞赏。
我使用的是Django 1.2。
从Decimal的文档页面来看,我认为一旦我们使用十进制来计算,它将是一个正确的结果,没有任何浮动错误。
但是当我尝试这个方程时
from decimal import Decimal, getcontext
getcontext().prec = 250
a = Decimal('6')
b = Decimal('500000')
b = a ** b
print('prec: ' + str(getcontext().prec) + ', ', end='')
print(b.ln() / a.ln())
Run Code Online (Sandbox Code Playgroud)
它给了我不同的结果!
我想计算以 6 为基数表示的数字6**500000,所以我的预期结果是int(b.ln() / a.ln()) + 1,所以我的预期结果是,应该是 500001。但是,当我将 prec 设置为 250 时,它给出了错误的结果。我该如何解决这个问题?
另外,如果我想输出不带科学计数法(即 )的结果5E+5,我该怎么办?
在中Python,我的值0.000001,0.00001,0.0001,....,1.0存储在my_Array(np.array)中。对于这些值中的每一个,我都需要在绘图中标记一条曲线并将其存储在图例中,val = 10e-6而不是val = 0.000001。如果使用第二个版本,则会自动存储第二个版本(用于i'th值):
matplolib.pyplot.plot(...., label = 'val = ' + str(my_Array[i]))
Run Code Online (Sandbox Code Playgroud)
是否有将浮点表示法转换为10表示法科学能力的函数?
我有这个数据
[[ 2.696000e+00 0.000000e+00 0.000000e+00 0.000000e+00]
[ 2.577000e+00 0.000000e+00 0.000000e+00 0.000000e+00]
[ 0.000000e+00 -2.560096e+03 0.000000e+00 0.000000e+00]
...
Run Code Online (Sandbox Code Playgroud)
并想为每一行打印它
2.696000e+00 & 0.000000e+00 & 0.000000e+00 & 0.000000e+00 //
2.577000e+00 & 0.000000e+00 & 0.000000e+00 & 0.000000e+00 //
...
Run Code Online (Sandbox Code Playgroud)
我所做的是
for k in range(1):
for i in range(len(data[k])):
print(data[k][i],'&')
if i == len(data[k])-1:
print(data[k][i],'//')
Run Code Online (Sandbox Code Playgroud)
哪个输出
2.696 &
0.0 &
0.0 &
0.0 &
0.0 //
Run Code Online (Sandbox Code Playgroud)
如何去掉行中每个条目之间的新行?
我使用这个问题4.08E+10来帮助我创建一个科学记数法函数,但是我想要的不是这个: 4.08 x 10^10。所以我做了一个像这样的工作函数:
def SciNotation(num,sig):
x='%.2e' %num #<-- Instead of 2, input sig here
x= x.split('e')
if (x[1])[0] == "-":
return x[0]+" x 10^"+ x[1].lstrip('0')
else:
return x[0]+" x 10^"+ (x[1])[1:].lstrip('0')
num = float(raw_input("Enter number: "))
sig = raw_input("Enter significant figures: ")
print SciNotation(num,2)
Run Code Online (Sandbox Code Playgroud)
当给定输入时,此函数99999将打印输出1.00 x 10^5(2 个有效数字)。但是,我需要使用我的sig变量(用户输入的有效数字的数量)。我知道我必须将sig变量输入到代码的第 2 行,但我似乎无法开始工作。
到目前为止,我已经尝试过(输入 num=99999,sig=2):
x='%.%de' %(num,sig)
类型错误:在字符串格式化期间并非所有参数都被转换
x='%d.%de' %(num,sig)
x = 99999.2e(不正确的输出)
x='{0}.{1}e'.format(num,sig)
x = 99999.0.2e(不正确的输出)
任何帮助,将不胜感激!
我想输出幂运算的结果,例如:
100**100
Run Code Online (Sandbox Code Playgroud)
但是,不是输出:
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
我希望它输出一个包含“e”的结果:
1e+200
Run Code Online (Sandbox Code Playgroud)
我看过其他类似的堆栈溢出问题,但我找不到一种方法可以让我在不为此定义另一个函数的情况下执行此操作。
有内置的Python函数可以做到这一点吗?
python ×9
decimal ×2
python-2.7 ×2
arrays ×1
django ×1
django-admin ×1
django-forms ×1
f-string ×1
formatting ×1
legend ×1
math ×1
matplotlib ×1
numpy ×1
precision ×1
python-3.x ×1
string ×1