为什么此操作始终返回0

时间:2014-10-13 21:59:43

标签: swift operators

所以我正在创建一个计算简单兴趣的应用程序。这是我的代码:

    @IBOutlet var principle: UITextField!
@IBOutlet var rate: UITextField!
@IBOutlet var time: UITextField!
@IBOutlet var total: UILabel!
//@IBOutlet var textFields: [UITextField]!
@IBAction func buttonTapped(AnyObject) {
    println("Calculate button tapped!")
    var principleInt: Int = principle.text.toInt()!
    var rateInt: Int = rate.text.toInt()! / 100
    var timeInt: Int = time.text.toInt()!
    var answer: Int = timeInt * rateInt * principleInt
    println(answer)
    var myString = String(answer)
    total.text = myString
}    

但是答案总是会返回0.这是为什么?我该如何解决?

1 个答案:

答案 0 :(得分:3)

我愿意打赌你的问题在这里:

var rateInt: Int = rate.text.toInt()! / 100

我们假设您输入了5的费率。因此,您获得字符串"5",将其转换为int 5,除以100并获取0。然后将其乘以任意两个其他数字,结果为0

为什么呢?好吧,整数的整数点是它们是没有小数值的数字。*有关详细信息,请参阅Wikipedia,但这应该足以理解5/100是小数值,并且如果强制使用Swift把它放到一个整数中,你可能得到的最好的是0(或1)。**

如果您想要处理不是100%的倍数的费率,您可能希望将rateInt设置为整数而不除以100,然后设置另一个变量,如rateFractiondouble,值rateInt / 100.0,然后将其与其他两个值相乘,然后(如果需要)舍入并在结尾处转换回整数。 / p>


*可能更准确地说整数的全部意义在于它们是自然界对负数的延伸。你可以把它放在加法逆,前导,闭减或其他方面。但对于那些甚至不知道整数是什么的人来说,"数字没有小数值"可能更清楚。

**有不同的规则可以理解:向0舍入,向负无穷大舍入,舍入到最接近的整数,用1/2的几个不同的特殊规则之一。但这在这里几乎不重要;分数5/100介于01之间,因此如果您尝试将其强制为整数,它将会舍入到这两个数中的一个。事实上它恰好是Swift中的0,几乎所有其他编程语言都不重要。