在Python浮点运算中将小数位数限制为2

时间:2017-09-23 00:30:49

标签: python floating-point decimal

我的想法是接受一个数字作为输入,也许1.00然后将它乘以一个常数。

随后,它被传递给一个函数,该函数确定它是否是有效的回文结构。

如果不是,则数量将逐渐增加,直到达到有效的回文 - 但是,我想将探索空间限制在第二个小数位。

也就是说1.01是有效输出,但1.001不是。

下面的代码执行上述过程,但需要注意的是当前输出通常是无效的,溢出到较小的小数空间,即1.00001,依此类推。

如何将操作的小数位数限制为两个?

import sys

# This method determines whether or not the number is a Palindrome
def isPalindrome(x):
    x = str(x).replace('.','')
    a, z = 0, len(x) - 1
    while a < z:
        if x[a] != x[z]:
            return False
        a += 1
        z -= 1
    return True

if '__main__' == __name__:

    trial = float(sys.argv[1])

    candidrome = trial + (trial * 0.15)

    print(candidrome)

    # check whether we have a Palindrome
    while not isPalindrome(candidrome):
        candidrome += 0.01

    if isPalindrome(candidrome):
        print( "It's a Palindrome! " + str(candidrome) )

建议的解决方案here似乎不起作用:

# check whether we have a Palindrome
while not isPalindrome(format(round(candidrome,2))):
    candidrome += 0.01

1 个答案:

答案 0 :(得分:0)

得到这样的话:

import sys

# This method determines whether or not the number is a Palindrome
def isPalindrome(x):
    x = str(x).replace('.','')
    a, z = 0, len(x) - 1
    while a < z:
        if x[a] != x[z]:
            return False
        a += 1
        z -= 1
    return True

if '__main__' == __name__:

    trial = float(sys.argv[1])

    candidrome = trial + (trial * 0.15)

    print(candidrome)
    candidrome = round(candidrome, 2)


    # check whether we have a Palindrome
    while not isPalindrome(candidrome):
        candidrome += 0.01
        candidrome = round(candidrome, 2)
        print(candidrome)

    if isPalindrome(candidrome):
        print( "It's a Palindrome! " + str(candidrome) )