python浮点数小数位数,python浮点数的取值范围是多少?为什么
表示为一个字符串,其中的浮点数舍入到特定的位数。不要使用指数形式。本质上,我想显示浮点数,并确认它看起来不错。
这个问题有几个部分:
必须能够指定
有效位数。
有效数字
它需要是可变的,不。
字符串格式化完成。
接线员。【编辑】我修改了一下;字符串格式运算符可以执行此操作。
需要舍入
人们所期望的不是。
1.例如,99999999
我想出了一个方法来执行这个操作,但它看起来像工作,它还不完善。(最大精度为15位有效数字。)
defff(数字,符号) :
return(%.15f% ) round(number,int(-1 * floor)log 10)number)(SIG fig-1))(。rstrip ) ) (0))
Print (0.1,1))。
0.1
printf(0.00000000368568,2)).
0.000000000037
打印(756867,3))。
757000
有没有更好的办法?为什么Python在这里面没有内置函数?
有没有为此提供内置功能的语言?
以防万一,我知道%。* G %(3,3.142596)是格式选项吗?(尤其是星号)
我确实错过了星号形式的选项,但是用G返回索引和用F返回索引并不完美。 %。* f“%(0 0,3450000000000)得出344999990000。
我没有说你在做什么,但如果你用浮点数学来做关于钱的计算,这将是一个可怕的想法。使用十进制模块,或将数量存储为整数分(或等价的当地货币)。小数真的是你的最佳选择。
字符串格式化技巧似乎不是内置的。(1)打印浮点数的第一个有效数字显示在小数点后15位,(2)可以省略科学的计数方法。现在,您可以执行手动字符串操作。
下面,decimal模块用于从浮点数中提取decimal。
float_to_decimal函数用于将浮点数转换成十进制对象。decimal.decimal(str(f))的显而易见的方法是错误的。因为str) f)可能会丢失大量数字。
Float_to_decimal将从十进制模块的文档中删除。
当以整数元组的形式获取十进制数时,下面的代码完成以下任务:截断所需数量的有效数字,根据需要进行舍入,将数字连接成字符串,将符号变大,将小数点和零放在左边或右边。
在底部,有一些我用来测试f函数的情况。
进口说明
deffloat_to_decimal(f):
# http://docs.python.org/library/decimal.html #十进制-常见问题
convertafloatingpointnumbertodecimalwithnolosofinformation
n,d=f.as_integer_ratio(
分子,分母=decimal.decimal (n),decimal.decimal (d).
CTX=decimal.context(prec=60))
result=CTX.divide(分子,分母) )。
wile CTX.flags [ decimal.in exact ]:
CTX . flags[decimal . in exact]=false
ctx.prec *=2
result=CTX.divide(分子,分母) )。
返回结果
defff(数字,符号) :
# http://stack overflow . com/questions/2663612/nicely-presenting-a-floating-point-number-in-python/2663636366
这是一项资产(签名图0)
尝试:
d=decimal.decimal(数字).
除了类型错误:
d=float _ to _ decimal (float(数字) )
符号,数字,指数=d.as_tuple(
iflen(数字)符号fig:
数字=l
ist(数字)
digits . extend([0]*(sigfig-len(digits)))
shift=d.adjusted()
result=int()。join(map(str,digits[:sigfig]))
#四舍五入结果
如果len(digits)sigfig和digits[sigfig]=5: result=1
result=list(str(result))
#舍入可以改变结果的长度
#如果是,调整换档
shift=len(结果)-sigfig
#将结果的长度重置为sigfig
结果=结果[:sigfig]
如果shift=sigfig-1:
#在末尾加上更多的零
结果=[0]*(shift-sigfig 1)
elif 0=shift:
#将小数点放在数字之间
result.insert(shift 1,.)
否则:
#在前面钉上零
断言(shift0)
结果=[0 ] [0]*(-shift-1)结果
如果签名:
result.insert(0,-)
返回“”。连接(结果)
if __name__==__main__ :
测试=[
(0.1, 1, 0.1),
(0.0000000000368568, 2,0.000000000037),
(0.00000000000000000000368568, 2,0.0000000000000000000037),
(756867, 3, 757000),
(-756867, 3, -757000),
(-756867, 1, -800000),
% 280 .099999999% 2c 1% 2c % 270.1% 27% 29% 2c % 0a % 20% 280。0099999999999% 2c 1% 2c % 270.01% 27% 29% 2c % 0a % 20% 280。0099999999% 2c % 2c % 2% 270.010% 27% 29% 2c % 2c % 0a % 20% 280。0099% 2c % 2% 270.0099% 27% 2c % 29% 2c % 0a % 20% 281.999999%-我.%0A%20%和5%至6% 82%和6%9C%和8%至6% 81%和6% b5 % AE %和7% 82% B9 %和7% B2 % be %和5%钡%至6% ef % BC % 8c %和5% 88% 99%和9% 9c % 80%和8%至6% 81%和4% BD % BF %和7% 94%至8% 10%和6%至8%至1%和5% 9d % 97%%和6% 8c % 87%和5% AE % 9a %和7% B2 %是%和5% ba % a 6% ef % BC % 8c %和8% 80% 8c %和4% b8 % 8d %和6% b98 % af %和6% 9c % 89%和6% 9c % 89%和6% 95% B0 %和5% b %至97%和3%80%82%和6% 9c % 89%和5%是% 88%和5%至4%至7%E%和5%不良事件% 83%和4% b8 % d8d %和4%公元前% 9a %和8% 888% d8d %和5% 85% a5 % B0 %和5% B0 % 8f %和6% B0 % 95% B0 %和7% B9 %和5% 82% B9 %和5% 90% 8和3%80%82%和4%分别为% 8b %和5%至6% ef % BC % 8c %和5% b8 %至6%9C%和8% af %至5%和6% 96% B9 %和6% B3 % 95%和4%公元前% 9a %和5% 88% 86%和8%至7% b8 % ba %和5%至4%至7%和6% b95 % efb % 8c %和4%是% 8b %和5%至6% 82% BF %和6% 95% B4 %和6% 95% B0 %和3% b80 % 82% 27%和5% 8d % 81%和8% BF % 9b %和5% 88% B6 %和6%至8% a1 %和5% 9d % 97%和5% 8c % 85%和5% 90% ab %和6% 9c % 89%和6% 95% 88%和4% BD % 8d %和7% 9a % 84%和6% BF % b5 % ef % BC % 8c %和5% 9b % a 0%和6%广告
问题是设法凑够重要的数字。十进制数的“quantize()”方法不会舍入到小数点以上,并且“round()”函数始终返回浮点数。我不知道这些是不是bug,但这意味着舍入无限精度浮点数的唯一方法是将它们解析为列表或字符串,然后手动舍入。换句话说,这个问题没有理性的答案。
不需要任意精度的浮点数。注意,他从来没有把四舍五入的答案当作浮点数,而只是当作一个字符串。BTW -1 *任何东西都可以写成-任何东西。
我不明白你说的“不会四舍五入到小数点以上”。试试:比如十进制(123.456)。quantify(十进制(1e1))。
顺便说一下,在Python 3.x中,舍入一个Decimal实例将返回另一个Decimal
@欣喜的Cherry Dickinson:是啊,没想到十进制(123.456)。量化(十进制(10))以表现不同。另外,如果在Python 3.x中小数舍入返回Decimal,看来是时候升级了。谢谢指导。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。