如果数字以.0
结尾,我正在尝试运行测试我正在运行一个数字数量级的程序,所以我无法估计到一定数量的数字。使用%不起作用,因为那时某些数字被排除在外。这个程序中的所有数字都是浮点数,所以我需要一种方法来检查它是否以.0结尾,而不是.00000000000001232或它必须完全结束的东西.0
圆函数的问题在于我正在处理几个数量级的数字。我需要一些东西来检查它之后是否只有1位小数。或检查该小数是否为0的东西。
代码:
from myro import *
from math import *
def main():
z = 3
a = 2
b = 2
x = 3
y = 2 #starts at y = 3
lim = 25
c = (a**x + b**y)**(1.0/z)
resultnum = 0
while z <= lim:
while a <= lim:
while b <= lim:
while x <= lim:
while y <= lim:
y = y + 1
c = (a**x + b**y)**(1.0/z)
if float(int(c) + 1) != round(c, 6):
pass
else:
print str(a) + "^" + str(x) + " + " + str(b) + "^" + str(y) + " = " + str(int(c)+1) + "^" + str(z)
resultnum = resultnum + 1
print c
y = 3
x = x + 1
x = 3
b = b + 1
b = 3
a = a + 1
a = 3
z = z + 1
print z
print "code cycle complete"
print str(resultnum) + " results"
main()
答案 0 :(得分:6)
>>> n1 = 2.0
>>> int(n1) == n1 and isinstance(n1, float)
True
>>> n1 = 2
>>> int(n1) == n1 and isinstance(n1, float)
False
>>> n1 = 2.01
>>> int(n1) == n1 and isinstance(n1, float)
False
>>> n1 = 1E1 #works for scientific notation as well
>>> int(n1) == n1 and isinstance(n1, float)
True
答案 1 :(得分:1)
Python已经做到了。使用Python提供的字符串可能就是你想要的:
In [577]: def dot_zero(number):
.....: return str(number).endswith('.0')
.....:
In [578]: dot_zero(2.0)
Out[578]: True
In [579]: dot_zero(2)
Out[579]: False
In [580]: dot_zero(2.01)
Out[580]: False
修改强>
正如@jamylak所指出的,自str
使用的科学记数法以来,这对大数字不起作用。将转换的基本思想保持在一个字符串中,同时也为大量数据提供服务,我们最终会得到更加冗长,更为丑陋的解决方案:
def dot_zero_string(number):
# tested and works with Python 3.3
split = str(number).split('e')
return len(split) == 2 or split[0].endswith('.0')
这是@AshwiniChaudhary
答案中的解决方案def dot_zero_inst(number):
return int(number) == number and isinstance(number, float)
比较不同的案例会得到相同的结果:
numbers = [1, 1.0, 1000, 1000.0, 3e38, 1.5555555555555555555555e12,
1.5555555555555555555555e17, 0, 0.0]
numbers = numbers + [-number for number in numbers]
for number in numbers:
assert dot_zero_inst(number) == dot_zero_string(number)
答案 2 :(得分:0)
只是为了显示另一种方法,您可以随时按'。'分组:
>>> num = 12.023
>>> str(num).split('.')[1] == '0'
False
>>> num = 12.0
>>> str(num).split('.')[1] == '0'
True
请注意,这是有效的,因为您说所有都是浮点数。这将提供错误num
是一个int
答案 3 :(得分:0)
x = 26.5
b % math.floor(b) == 0
>>> False
x = 26.0
b % math.floor(b) == 0
>>> True
也应该这样做。