斯威夫特的双打范围

时间:2014-06-23 01:56:08

标签: xcode double swift addition

我目前正在编写一个Swift应用程序,其中的部分内容需要确保某些用户输入符合指定值。

简化示例:

通过程序交互,用户指定totalValue = 67并且转为= 2.这意味着在两个输入中,用户必须提供两个最多相加67的值。

因此,在第1轮,用户输入32,然后在第2轮他输入35,这将是有效的,因为32 + 35 = 67。

这一切都很好,但是当我们进入多个小数位时,程序无法正确添加数字。例如,如果totalValue = 67然后在第1轮用户输入66.95然后在第2轮他输入.05程序将返回这是一个错误,尽管事实是 66.95 + .05 = 67.这个问题不会发生在一个小数位或更小的位置(例如转弯1 = 55.5和转弯2 = 11.5工作正常),仅适用于两个小数点以及更多小数点。我将值存储为双精度数。提前致谢

一些示例代码:

var totalWeights = 67
var input = Double(myTextField.text.bridgeToObjectiveC().doubleValue)

/*Each turn is for a button click*/

/*For turn 1*/
if inputValid == true && turn == 1 && input < totalWeights
{

  myArray[0] = input  

}
else
{
//show error string
}

/*For turn 2*/
if inputValid == true && turn == 2 && input == (totalWeights - myArray[0])
{

 myArray[1] = input

}
else
{

//show error string

}

3 个答案:

答案 0 :(得分:3)

如果你想要浮点的精确值,那么float / double类型将不起作用,因为它们只是精确数字的近似值。看看在Swift中使用NSDecimalNumber类,我不确定桥接会是什么样子但它应该很简单。

答案 1 :(得分:1)

以下是一个如何运作的示例:

var a = 0
for num in numlist {
    a += num
}
var result = false
if a == targetnum
  result = true

我还没有对此进行测试,但如果numlist是一个double数组,则它应适用于任何有效数字的输入。

我刚刚意识到的一个问题是,做一个与双打相等的问题,因为舍入会给你带来麻烦。我不打算显示它,但是如果在读取输入时你跟踪小数点右边有多少个数字,那么将所有值乘以十进制数,所以66.95 * 100为将它全部作为整数,然后添加,然后在将targetnum乘以相同的值(100)之后进行比较。

答案 2 :(得分:0)

不幸的是,没有理想的解决方案。我们必须使用近似类型比较。

例如,而不是检查:

if val1 == val2 

我们必须尝试类似的事情:

if val1 > (val2 - .0005) && val1 < (val2 + .0005)