如何在Ironpython中打印除法结果?

3 投票
4 回答
6464 浏览
提问于 2025-04-16 22:01

我想打印出 'x/y' 的结果,但它总是返回 '0'。当我打印 'x' 的时候,它显示得很正确,当我打印 'y' 的时候,也显示得很正确,但当我打印 'x/y' 的时候,它却显示为 0。

这是我的代码:

import random

y = 0
x = 0

p = 1
while True:    

    i = [random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100)]

    if len(set(i)) < len(i):
        print "Match!"
        x += 1
        y += 1
        print(x/y)  
    else:
        print "No Match!"
        y += 1
        print y

就像我说的,当需要打印 y 的时候,它能正确打印,但在需要打印 x/y 的时候,它却打印出 0。我还试过打印 x/yx//y,但它们也不行。

我到底哪里出错了?

提前谢谢你们!

4 个回答

4

我觉得有必要指出这个PEP中最相关的部分:

正确的解决方法比较微妙:如果一个参数可能是复数,直接把它转换成float()是不对的;如果你在一个参数上加上0.0,且这个参数是负零的话,它的符号就会变得不对。唯一没有这些缺点的解决方案是把一个参数(通常是第一个)乘以1.0。这样做可以保持值和符号不变,对于float和复数来说都是如此,而对于int和long来说,它会变成对应值的float。

所以,你可以这样做:

print 1.0 * x / y
5

这样做

from __future__ import division

阅读这个

http://www.python.org/dev/peps/pep-0238/

6

如果 x 和 y 都是整数,Python 会进行整数除法。所以如果结果是 0.某个小数,Python 就会显示 0。

如果你想要得到小数结果,就需要把它们转换成浮点数:

print float(x) / float(y)

或者使用 Decimal 对象:

from decimal import Decimal
print Decimal(x) / Decimal(y)

撰写回答