Restrict number of decimal places to two in Python float operations

淺唱寂寞╮ 提交于 2019-12-13 10:16:55

问题


My idea is accept a number as input, perhaps 1.00 and then multiply it by a constant.

Subsequently it is passed to a function that determines whether or not it is a valid palindrome.

In the case that it is not, the number will be incrementally augmented until a valid palindrome is achieved-- however, I'd like to restrict the exploration space to the 2nd decimal place.

That is to say 1.01 is valid output, but 1.001 is not.

The code that follows executes the process described above, with the caveat that the current output is typically invalid, overflowing into smaller decimal spaces, i.e. 1.00001 and so on.

How can the number of decimal places of the operation be restricted to two?

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) )

The solution suggested here does not seem to work:

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

回答1:


Got it like this:

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) )


来源:https://stackoverflow.com/questions/46374858/restrict-number-of-decimal-places-to-two-in-python-float-operations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!