需要一个确定值的比例的函数

时间:2013-04-04 03:02:15

标签: python numpy

假设我有一些值:.008,.08,.8,8,80,800。我需要一个函数,我可以输入这些值并返回.001,.01,.1,1,10, 100等...

示例:

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

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

3 个答案:

答案 0 :(得分:5)

from math import log, floor
def func(v):
   a = floor(log(v, 10))
   return 10**a

答案 1 :(得分: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
>>> 

答案 2 :(得分:0)

我不会为你编写这个函数,因为这可能是你自己应该做的事情,但就psuedocode而言,做这样的事情:

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(也就是减去0)。

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

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