2024-04-26 09:37:33 发布
网友
我正在制作一个程序,由于不需要解释的原因,它需要将一个float转换成一个字符串,并用len()进行计数。然而,str(float(x))在转换为字符串时会导致x被舍入,这会导致整个字符串被舍入。有人知道它的修理方法吗? 如果您想知道的话,下面是使用的代码:
len(str(float(x)/3))
其他的答案已经指出,至少可以说,浮点数的表示是一个棘手的问题。
由于您在问题中没有给出足够的上下文,我不知道十进制模块是否能满足您的需要:
http://docs.python.org/library/decimal.html
除此之外,您还可以显式指定希望获得的精度(从文档中):
>>> getcontext().prec = 6 >>> Decimal('3.0') Decimal('3.0') >>> Decimal('3.1415926535') Decimal('3.1415926535') >>> Decimal('3.1415926535') + Decimal('2.7182818285') Decimal('5.85987') >>> getcontext().rounding = ROUND_UP >>> Decimal('3.1415926535') + Decimal('2.7182818285') Decimal('5.85988')
我的提示(Python2.6)中的一个简单示例:
>>> import decimal >>> a = decimal.Decimal('10.000000001') >>> a Decimal('10.000000001') >>> print a 10.000000001 >>> b = decimal.Decimal('10.00000000000000000000000000900000002') >>> print b 10.00000000000000000000000000900000002 >>> print str(b) 10.00000000000000000000000000900000002 >>> len(str(b/decimal.Decimal('3.0'))) 29
也许这能帮上忙? decimal从2.4开始就在python stdlib中,并在python 2.6中添加。
希望能帮上忙, 弗朗西斯科
在处理浮点数时,某些形式的舍入通常是不可避免的。这是因为你能以10为基数精确表达的数字不能总是以2为基数精确表达(你的计算机使用2)。
例如:
>>> .1 0.10000000000000001
在本例中,您将看到.1使用repr转换为字符串:
repr
>>> repr(.1) '0.10000000000000001'
我相信python在使用str()来解决这个问题时会去掉最后几个数字,但这是一个局部的解决方法,不能代替理解正在发生的事情。
>>> str(.1) '0.1'
我不确定“四舍五入”到底给你带来了什么问题。也许您可以更好地使用字符串格式来更精确地控制输出?
例如
>>> '%.5f' % .1 '0.10000' >>> '%.5f' % .12345678 '0.12346'
Documentation here。
len(repr(float(x)/3))
不过,我必须说,这不像你想的那么可靠。
浮点数是以十进制数字输入/显示的,但计算机(实际上是标准的C库)将它们存储为二进制。你会从这个转变中得到一些副作用:
>>> print len(repr(0.1)) 19 >>> print repr(0.1) 0.10000000000000001
python教程的this chapter中解释了为什么会发生这种情况。
一种解决方案是使用一种专门跟踪十进制数的类型,比如python的^{}:
>>> print len(str(decimal.Decimal('0.1'))) 3
其他的答案已经指出,至少可以说,浮点数的表示是一个棘手的问题。
由于您在问题中没有给出足够的上下文,我不知道十进制模块是否能满足您的需要:
http://docs.python.org/library/decimal.html
除此之外,您还可以显式指定希望获得的精度(从文档中):
我的提示(Python2.6)中的一个简单示例:
也许这能帮上忙? decimal从2.4开始就在python stdlib中,并在python 2.6中添加。
希望能帮上忙, 弗朗西斯科
在处理浮点数时,某些形式的舍入通常是不可避免的。这是因为你能以10为基数精确表达的数字不能总是以2为基数精确表达(你的计算机使用2)。
例如:
在本例中,您将看到.1使用
repr
转换为字符串:我相信python在使用str()来解决这个问题时会去掉最后几个数字,但这是一个局部的解决方法,不能代替理解正在发生的事情。
我不确定“四舍五入”到底给你带来了什么问题。也许您可以更好地使用字符串格式来更精确地控制输出?
例如
Documentation here。
不过,我必须说,这不像你想的那么可靠。
浮点数是以十进制数字输入/显示的,但计算机(实际上是标准的C库)将它们存储为二进制。你会从这个转变中得到一些副作用:
python教程的this chapter中解释了为什么会发生这种情况。
一种解决方案是使用一种专门跟踪十进制数的类型,比如python的^{} :
相关问题 更多 >
编程相关推荐