关于python格式化的问题
关于python格式化的问题大佬们,这里有个问题,不知道为什么会这样:
print("{:g}".format(6666666666))
输出结果是:
6.66667e+09
print("{:e}".format(6666666666))
输出结果是:
6.666667e+09
但为什么6.666667e + 09 与 6.66667e+09 相差一个数字 6 呢?明明都是对应6666666666的呀!?
大佬们,帮帮我!!!
{:10_254:} {:10_254:} {:10_254:} {:10_254:}
答对者,必重金感谢!!!
兄弟们,行动起来吧!!!
{:10_257:} {:10_297:} {:10_281:} {:10_298:} python爱好者. 发表于 2022-1-16 17:47
@Stubborn @傻眼貓咪
https://docs.python.org/zh-cn/3.8/library/string.html#formatspec
This is "e"
科学计数法。 对于一个给定的精度 p,数字格式化为以字母 'e' 分隔系数和指数的科学计数法形式。 系数在小数点之前有一位,之后有 p 位,总计 p + 1 个有效数位。 如未指定精度,则会对 float 采用小数点之后 6 位精度,而对 Decimal 则显示所有系数位。 如果小数点之后没有数位,则小数点也会被略去,除非使用了 # 选项。
This is "g"
常规格式。 对于给定精度 p >= 1,这会将数值舍入到 p 个有效数位,再将结果以定点格式或科学计数法进行格式化,具体取决于其值的大小。 精度 0 会被视为等价于精度 1。
准确的规则如下:假设使用表示类型 'e' 和精度 p-1 进行格式化的结果具有指数值 exp。 那么如果 m <= exp < p,其中 m 以 -4 表示浮点值而以 -6 表示 Decimal 值,该数字将使用类型 'f' 和精度 p-1-exp 进行格式化。 否则的话,该数字将使用表示类型 'e' 和精度 p-1 进行格式化。 在两种情况下,都会从有效数字中移除无意义的末尾零,如果小数点之后没有余下数字则小数点也会被移除,除非使用了 '#' 选项。
如未指定精度,会对 float 采用 6 个有效数位的精度。 对于 Decimal,结果的系数会沿用原值的系数数位;对于绝对值小于 1e-6 的值以及最小有效数位的位值大于 1 的数值将会使用科学计数法,在其他情况下则会使用定点计数法。
正负无穷,正负零和 nan 会分别被格式化为 inf, -inf, 0, -0 和 nan,无论精度如何设定。 加油,兄弟们! @Stubborn @傻眼貓咪 纠结这个干啥,它是转为"科学计数法",但这过程涉及了"浮点数",保留多少位的小数精度,是它的事,不是"有问题"的事,
并且这是返回的是 字符串 的形式,不是数值类型了,通常也不会再这个基础上进行计算。
所以,你若要进行大数运算,要另寻别的办法(如其他专用数学运算模块)。它这个只是 将大数 转为 一种"科学计数的字符形式"而已。 python爱好者. 发表于 2022-1-16 17:47
@Stubborn @傻眼貓咪
其实这不是 Python 才会这样,其它如 C/C++ 语言同样也是如此,你给定的例子不够明显,我给个更明显的例子吧:
C#include <stdio.h>
int main()
{
double a = 392.65;
printf("%e\n", a);
printf("%g\n", a);
return 0;
}Pythona = 392.65
print("{:e}".format(a))
print("{:g}".format(a))打印结果:3.926500e+02
392.65
这是为什么呢?其实 %g 如同 %e,只是以最简约方式呈现值而已。 所以说就是:
使用 g 时:
小数点后的位数 就是 设定的精度参数
而使用 e 时:
小数点后的位数 却是 设定的精度参数 + 1
理解对吗?
{:10_257:}{:10_254:}
python爱好者. 发表于 2022-1-16 18:34
所以说就是:
使用 g 时:
小数点后的位数 就是 设定的精度参数
@Stubborn 本帖最后由 阿奇_o 于 2022-1-16 19:14 编辑
python爱好者. 发表于 2022-1-16 18:34
所以说就是:
使用 g 时:
小数点后的位数 就是 设定的精度参数
人家好心把文档都给出了,自己仔细读读呀。。
https://s4.ax1x.com/2022/01/16/7NVOu8.png
页:
[1]