如何获得h作为Int的值?

时间:2016-04-01 20:43:02

标签: python python-3.x

运行这行代码时,我得到两个不同的答案:

h = (1 + math.floor(((26*(m + 1))/10)) + k + math.floor(k / 4) + math.floor(j / 4) + (5 * j)) % 7

直接在IDLE中运行时,我得到6,但是当我将其作为脚本运行时,我得到6.8。我希望h的值为int。当我在程序中打印它时,它给我float值。

def getStartDay(year, month):
    m = month
    if m == 1:
        month = 12
        year = year -1
    if m == 2:
        month = 14
        year = year -1
    j = year / 100
    k = year % 100

    # Zeller's congruence
    h = (1 + math.floor(((26*(4 + 1))/10)) + 16 + math.floor(16 / 4) + math.floor(20 / 4) + (5 * 20)) % 7
    print(h)
    return h

2 个答案:

答案 0 :(得分:0)

您只需使用int():)

print(int(6.8))
>>> 6

您的代码"已修复":

def getStartDay(year, month):
    #Don't forget to import math! and try "import antigravity" :)
    m = month
    if m == 1:
        month = 12
        year = year -1
    if m == 2:
        month = 14
        year = year -1
    j = year / 100
    k = year % 100

    # Zeller's congruence (made it shorter, >80 character lines are
    #                      considered bad formatted code .-.)
    h = (1 + math.floor(((26*(4 + 1))/10)) + 16 + math.floor(16 / 4)
         + math.floor(20 / 4) + (5 * 20)) % 7
    h = int(h)
    print(h)
    return h

答案 1 :(得分:0)

问题的原因(float而不是int)是floor函数在python 2和3中的行为不同

Python 2给出了浮动

>>> math.floor(4)
4.0

而Python 3返回int

>>> math.floor(4)
4

我没有为h再现6.8。然而,我可以重现6.0 vs 6,因此可以通过返回'int(h)'

来解决问题。
return int(h)