以浮点数向下移动点

时间:2011-03-28 18:42:07

标签: python recursion floating-point integer

首先,感谢关注,我是这个网站的新手^^所以请原谅我,如果我做错了...

我的Python代码存在很大问题......我是编程新手,而且我也是Python的新手。

我需要取一个浮点数并将该点向右移动,使其变为整数,如取60.27并得到6027.

我正在使用的算法递归地将num*10乘以num%2==0,然后得到int(num)

问题是,当我乘以(例如)602.47*10时,它会返回6024.700000000001并且它显然不起作用: - )

有没有办法解决它,或任何其他技术或其他方式来递归?我被允许使用我需要的任何东西,但它必须是递归的:没有forwhile ......

感谢您的帮助!!我的第一语言不是英语,所以请原谅,如果难以阅读......

6 个答案:

答案 0 :(得分:2)

浮点表示具有该问题。

您是否想要改变:

1.2345
12.345
123.45
1234.5

全部到12345?

对于没有确切代表的浮点数(你提到6024.70),你期望得到6024700000000001,因为这是最接近6024.70的输出,可以存储在浮点数中吗?

答案 1 :(得分:2)

>>> str(60.27).translate(None, '.')
'6027'

使用lstrip('0')防止小数点低于1。


来自文档:

  

S.translate(table [,deletechars]) - >串

     

返回字符串S的副本,其中包含所有字符       在可选参数中删除deletechars,并且       剩余的字符已通过给定的映射       转换表,必须是长度为256的字符串。

答案 2 :(得分:1)

将数字解析为字符串并进行字符串操作会更加可靠。正如您所见,任何涉及浮点数的数值计算都必然会产生不准确性。没有解决这个问题。

答案 3 :(得分:1)

由于你不能(可靠地)使用浮点来做你想要的,一个简单的黑客是将数字转换为字符串然后撕掉小数点:

int(str(num).replace('.',''))

这适用于任何未用科学记数法表示的数字。如果你的数字很大(或很小),最终用科学记数法表示,请看this

答案 4 :(得分:1)

您可以尝试以下方式:

x = 60.27
newx = int(str(x).replace('.',''))

编辑:作为旁注,字符串.replace.translate对于各种大小的浮动广告具有相似的性能

%timeit int(str(4.73285).replace('.',''))
100000 loops, best of 3: 2.65 us per loop

%timeit int(str(4.73285).translate(None, '.'))
100000 loops, best of 3: 3.02 us per loop

答案 5 :(得分:1)

在这里黑暗中采取疯狂的刺,但你的数字代表你试图在(比方说)美元和美分之间转换的金额吗?如果是这样,您需要停止正在执行的操作并将所有内容转换为美分,并在实际向用户呈现内容时仅使用“美元”值。使用浮点数表示货币价值是一个非常非常糟糕的主意。

如果没有,请忽略我: - )