2013-04-04 63 views
2

可以说我有一些值:.008,.08,.8,8,80,800.我需要一个函数,我可以输入这些值并返回.001, 0.01,0.1,1,10,100等...需要一个函数来确定一个值的比例

例如:

def func(v): 
    a = do something using v..... 
    return a 

func(.009) = .001 
func(.06) = .01 
func(1234) = 1000 

回答

2
>>> import math 
>>> 10**math.floor(math.log10(.009)) 
0.001 
>>> 10**math.floor(math.log10(.06)) 
0.01 
>>> 10**math.floor(math.log10(1234)) 
1000.0 
>>> 
5
from math import log, floor 
def func(v): 
    a = floor(log(v, 10)) 
    return 10**a 
+1

你应该使用'math.log10' – jamylak 2013-04-04 03:08:03

0

我不会写功能为你,因为这很可能是你应该做自己,但根据伪代码,请做这样的事情:

def func(v): 
    new str; 
    length = len(v) - 1 
    if v[0] == '.': 
     str = '.' 
     for x in range (0, length): 
      if x == length - 1: 
       str = str + '1' 
      else: 
       str = str + '0' 
    else: 
     str = '1'; 
     for x in range (0, length): 
      str = str + '0' 
    return str.toInteger() 

基本上你会找到数字的长度并将其减1。原因是因为你知道结果的第一个字符是什么。它是一个十进制或1。我们检查字符串的第一个元素(如果它的数字,将其转换为字符串)。如果第一个元素是一个十进制数,那么结果将是一个小数,然后使用数字-1的长度(也就是没有小数的数字的长度)来计算多少个0和1来串联到字符串。如果输入不是十进制数,那么你只需要str ='1'。然后根据其长度加1(即减去0)。

现在我不确定这种情况是否会出现,但如果您的电话号码是20.25,那么除了第一个字符是数字而不是小数点之外,它是相同的,您需要检查如果字符串的其余部分是小数。

你会注意到我在我的回复中说了很多字符串,因为如果它是一个字符串它更容易。如果它的数字,将其转换为字符串,因为它更容易操作。

相关问题