Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 正在将字符串分配给双。。。。线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0)_Ios_Swift - Fatal编程技术网

Ios 正在将字符串分配给双。。。。线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0)

Ios 正在将字符串分配给双。。。。线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0),ios,swift,Ios,Swift,我有一个选择器视图(我称之为微调器),其中有两个组件恰好等于英镑和便士的值。。。每个的数据源为0到99,因此用户可以选择从0.00英镑到99.99英镑的任何值 我有下面一段带有prepareForSegue函数的代码 //need to find out what the spinner is set to var firstComponent = pickerData[0][spinFuelAmount.selectedRowInComponent(0)] firstComponent = f

我有一个选择器视图(我称之为微调器),其中有两个组件恰好等于英镑和便士的值。。。每个的数据源为0到99,因此用户可以选择从0.00英镑到99.99英镑的任何值

我有下面一段带有prepareForSegue函数的代码

//need to find out what the spinner is set to
var firstComponent = pickerData[0][spinFuelAmount.selectedRowInComponent(0)]
firstComponent = firstComponent.stringByReplacingOccurrencesOfString( "£ ", withString: "" )

var secondComponent = pickerData[1][spinFuelAmount.selectedRowInComponent(1)]
secondComponent = secondComponent.stringByReplacingOccurrencesOfString( "  .", withString: "" )

let amountAsString = firstComponent + "." + secondComponent
Data.sharedData.fuelAmount = Double(amountAsString)!
Data.sharedData.fuleAmount在我的singleton类中声明为双精度

import Foundation

class Data: NSObject {

    static let sharedData = Data()

    var startMileage: String!
    var previousMileage: String!
    var startLocation:String!
    var endLocation:String!

    var didFillUp: Bool!

    var previousFuelMileage: String!
    var fuelFillMileage: String!
    var fuelAmount: Double!

    var sender: String!

}
运行时,程序在这些行的最后一行中断,错误为线程1:EXC\U BAD\U INSTRUVTION(代码=EXC\U I386\U INVOP,子代码=0x0)


由于我是Xcode和Swift新手,我正在努力调试并找到原因。。。感谢您的帮助。

如果您打印出
amountAsString
它会显示什么?另一方面,您应该尽可能避免隐式展开,以防止出现此类错误。最后,我不建议对货币使用
Double
。最好使用
NSDecimalNumber
或将小数保留为
Int
。这将在以后为您节省许多问题/头痛。@Eendje amountAsString值看起来都很好。。。我得到的样本值是“32.45”、“11.04”、“5.00”、“64.02”、“9.55”等。。。我会看看更改为NSDecimalNumber是否有帮助…更改为NSDecimalNumber没有帮助。我通过使用@Eendje第二个建议解决了这个问题,并将燃油量保持为整数。。。实际上,我将金额存储为两个Int(s),一个表示英镑值,另一个表示便士值。改为NSDecimalNumber并没有帮助。只是当你处理货币时,你不应该使用浮动或双精度。因为,如果您尝试打印((9.49*0.1)=0.949)它会打印:
false
@Eendje-理解。。。现在所有完成的工作都使用int值。。。我的应用程序很简单。。。不涉及数学,它只存储里程和燃油,然后输出,以便在公司里程日志中提交