强制该数字输出至少有两个尾随小数位,包括尾随零

时间:2017-09-23 02:46:26

标签: python floating-point precision decimal-point

我有一个Python脚本,它产生以下输出:

31.7
31.71
31.72
31.73
31.74
31.75
31.76
31.77
31.78
31.79
31.8
31.81
31.82
31.83
31.84
31.85
31.86
31.87
31.88
31.89
31.9
31.91

请注意数字31.731.831.9

我的脚本的目的是确定数字回文,例如1.01

脚本的问题(下面重现)是它会将1.1等数字回文评估为有效 - 但是 - 即在这种情况下,不被视为有效输出。

有效输出需要具有完全两个小数位。

如何强制数字输出至少有两个尾随小数位,包括尾随零?

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

    operand = float(sys.argv[2])

    candidrome = trial + (trial * 0.15)

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

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

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

4 个答案:

答案 0 :(得分:1)

尝试使用此代替str(x)

twodec = '{:.2f}'.format(x)

答案 1 :(得分:1)

您可以使用内置format功能。 .2表示位数,f表示&#34; float&#34;。

if isPalindrome(candidrome):
    print("It's a Palindrome! " + format(candidrome, '.2f'))

或者:

if isPalindrome(candidrome):
    print("It's a Palindrome! %.2f" % candidrome)

答案 2 :(得分:0)

你可以试试这个:

data = """
    1.7
    31.71
    31.72
    31.73
  """
new_data = data.split('\n')
palindromes = [i for i in new_data if len(i) > 3 and i.replace('.', '') == i.replace('.', '')[::-1]]

答案 3 :(得分:0)

x = ("%.2f" % x).replace('.','')