在Python中使用格式字符串我可以使用「科學記數法」輕鬆打印數字。在Python中使用LaTeX表示法的格式編號
>> print '%g'%1e9
1e+09
什麼是格式化在乳膠格式數目的最簡單的方法,即,1個\ times10^{+ 09}?
在Python中使用格式字符串我可以使用「科學記數法」輕鬆打印數字。在Python中使用LaTeX表示法的格式編號
>> print '%g'%1e9
1e+09
什麼是格式化在乳膠格式數目的最簡單的方法,即,1個\ times10^{+ 09}?
siunitx LaTeX軟件包通過允許您直接使用python float值,而無需解析生成的字符串並將其轉換爲有效的LaTeX,從而爲您解決了這個問題。
>>> print "\\num{{{0:.2g}}}".format(1e9)
\num{1e+09}
當乳膠文件被編譯時,上面的代碼將變成 。正如安迪巴克利在評論中指出的那樣,siunitx可能不會接受加號(我沒有測試過),因此可能需要對結果做一個.repace("+", "")
。
如果使用siunitx
是莫名其妙假表,寫這樣的自定義函數:
def latex_float(f):
float_str = "{0:.2g}".format(f)
if "e" in float_str:
base, exponent = float_str.split("e")
return r"{0} \times 10^{{{1}}}".format(base, int(exponent))
else:
return float_str
測試:
>>> latex_float(1e9)
'1 \\times 10^{9}'
不錯的解決方案!這是做什麼要求的,但是當爲了數學正確性而格式化時,在指數中包括+符號或前導零是不正常的(參見上面的siunitx輸出)。另外,由於'\ times'命令,使用原始(「r」)字符串是一個好主意。這些可以通過替換第一個返回來完成: parts = float_str.split(「e」); return r「{0} \ times 10^{{{}}}」。format(parts [0],int(parts [1])) (希望這是可以理解的:SO在代碼格式上沒有註釋!) – andybuckley
@andybuckley感謝您的反饋!我糾正了我的答案。 –
我也不確定什麼輸入siunitx處理,只是它的_output_是正常的數學格式沒有顯式加號或指數中的前導0。我上面評論中的內嵌代碼(可惜)是我可以想到的用於映射指數上的cast-to-int的最優雅的方式......也許在itertools中對於這樣的事情有些奇怪,但希望它很清楚這樣就夠了! – andybuckley
您可以編寫一個frexp10
功能:
def frexp10(x):
exp = int(math.floor(math.log10(abs(x))))
return x/10**exp, exp
格式在LaTeX風格然後:
'{0}^{{{1:+03}}}'.format(*frexp10(-1.234e9))
我不認爲'1^{+ 09}'完全是你想要的輸出,但無論如何。 – walkytalky
當然,我的意思是10^{+ 09} – pafcu