使用动态精度将浮点转换为字符串-python

使用动态精度将浮点转换为字符串-python,python,string,python-2.7,precision,Python,String,Python 2.7,Precision,我想将浮点值(具有动态精度)转换为字符串 如果我得到的浮点值a=10.00,那么结果应该是'10.00' 如果a=10.000,则结果应为“10.000” 我得到的结果是这样的 a = 10.00 str(a) '10.0' 但我想要这样的结果 a = 10.00 str(a) '10.00' 有什么办法吗?如果要保留有效数字,请使用该模块 十进制模块不支持十进制浮点运算 >>> num1/5 Decimal('2.000') >>> num1+22 De

我想将浮点值(具有动态精度)转换为字符串 如果我得到的浮点值a=10.00,那么结果应该是'10.00' 如果a=10.000,则结果应为“10.000”

我得到的结果是这样的

a = 10.00
str(a)
'10.0'
但我想要这样的结果

a = 10.00
str(a)
'10.00'

有什么办法吗?

如果要保留有效数字,请使用该模块

十进制模块不支持十进制浮点运算

>>> num1/5
Decimal('2.000')
>>> num1+22
Decimal('32.000')

如果您试图保留有效数字,请使用模块

十进制模块不支持十进制浮点运算

>>> num1/5
Decimal('2.000')
>>> num1+22
Decimal('32.000')
我得到a=10.00,结果应该是“10.00”,如果a=10.000,结果应该是“10.000”

如果a=5.500,则str(a)应为“5.500”;如果a=10.50,则str(a)应为“10.50”;如果a=1.050,则str(a)应为“1.050”

你所要求的是不可能的。不是用Python,也不是用我所知道的任何其他编程语言。如果
a
是常规浮点数,则
10.0
10.00
10.000
相同。它们的存储方式相同,精度也相同

>>> a = 5.500
>>> b = 5.5
>>> c = 5.500000000
>>> a == b == c
True
避免这种情况的唯一方法不是使用
float
,而是另一种类型,如
Decimal
,如另一个答案所示

让我解释一个场景,其中我允许用户从命令行输入输入,例如用户输入10.00,我想要小数点后的两个0,当前金额变为10.0

根据您最后的评论,您从文本输入中获取数字,即作为
str
,因此使用
十进制应该没有问题。但是,如果您只想将这些数字回显给用户,您甚至不需要这样做:只需打印用户最初输入的字符串

请注意,我只接受来自用户输入的数字(我不希望允许字符串输入)

您只需获取字符串输入并将该输入转换为数字即可。问题已解决

>>> s = raw_input("enter number ")
enter number 10.000
>>> f = float(s)
>>> s
'10.000'
>>> f
10.0
我得到a=10.00,结果应该是“10.00”,如果a=10.000,结果应该是“10.000”

如果a=5.500,则str(a)应为“5.500”;如果a=10.50,则str(a)应为“10.50”;如果a=1.050,则str(a)应为“1.050”

你所要求的是不可能的。不是用Python,也不是用我所知道的任何其他编程语言。如果
a
是一个常规浮点数,那么
10.0
10.00
10.000
是相同的。它们的存储方式相同,精度也相同

>>> a = 5.500
>>> b = 5.5
>>> c = 5.500000000
>>> a == b == c
True
避免这种情况的唯一方法不是使用
float
,而是另一种类型,如
Decimal
,如另一个答案所示

让我解释一个场景,其中我允许用户从命令行输入输入,例如用户输入10.00,我想要小数点后的两个0,当前金额变为10.0

根据您的上一条评论,您从文本输入中获得数字,即作为
str
,因此使用
decimal
应该没有问题。但是如果您只想将这些数字回显给用户,您甚至不需要这样做:只需打印用户最初输入的字符串

请注意,我只接受来自用户输入的数字(我不希望允许字符串输入)

您只需获取字符串输入并将该输入转换为数字即可。问题已解决

>>> s = raw_input("enter number ")
enter number 10.000
>>> f = float(s)
>>> s
'10.000'
>>> f
10.0


顺便说一句,假设
是一个小数点,而不是数字分组,
a=10.00
a=10.000
是完全相同的值,不可能区分这两个值。可能
10.00
10.000
只是一个错误选择的示例,但目前您要求的函数将返回
y
if输入是
x
,但如果输入是
x
,则输入是
z
。很抱歉,但让我解释一下,它不是关于10.00或10.000的,我指的是带有动态的动态浮点值precision@tobias_k是的,我知道10.00和10.000是相同的,但这是否可能以字符串格式获得相同的值我们理解abo部分但是我们需要一个更好的例子或者更多的解释来说明你真正想要的是什么。只需输入一些数字并说明它们的格式。尽量不要让所有这些数字都是相同的数字。顺便说一句,假设
是小数点而不是数字分组,
a=10.00
a=10.000
是完全相同的值,无法区分两者。可能
10.00
10.000
只是一个选择不当的示例,但当前您要求的函数在输入为
x
时返回
y
,但在输入为
x
时返回
z
。ya很抱歉,但让我解释一下它不是关于10.00或10.000的,我说的是动态浮点值和动态浮点值precision@tobias_k是的,我知道10.00和10.000是相同的,但这是否可能在字符串格式中得到相同的值?我们理解关于动态精度的部分,您前三次这么说,但我们需要一个更好的ex关于你真正想要的是什么,有足够或更多的解释。只需输入一些数字,并说明它们的格式。尽量不要让所有这些数字都是相同的数字。你给的是字符串值input@SwapneshShah请参阅我的评论。
float
10.000
10.00
无法区分。@swapneshsah-您想要这样的东西
打印“%.2f”无论是
a=10.00
还是
a=10.000
?@SwapneshShah-请仔细阅读他的评论并思考一下您的问题。@Jason Estibeiro我不想在转换为字符串的过程中删除十进制精度您给出的字符串值为input@SwapneshShah请看我的评论。作为一个例子<有限公司