По состоянию на март 2018 года, я думаю, что самым сильным ответом в этой теме по-прежнему остается принятый ответ 2011 года . Реализации, которые включали использование NSAppleScript или OSAScript, имели недостатки, которые имели незначительные, но крайне неприятные утечки памяти, не предоставляя каких-либо дополнительных преимуществ. Любой, кто борется с тем, чтобы этот ответ выполнялся правильно (в Swift 4), может попробовать это:
let manager = FileManager()
// Note that this assumes your .scpt file is located somewhere in the Documents directory
let script: URL? = try? manager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
if let scriptPath = script?.appendingPathComponent("/path/to/scriptName").appendingPathExtension("scpt").path {
let process = Process()
if process.isRunning == false {
let pipe = Pipe()
process.launchPath = "/usr/bin/osascript"
process.arguments = [scriptPath]
process.standardError = pipe
process.launch()
}
}
Вы не на самом деле пытаетесь сохранить 123,66, потому что вы не можете представить 123,66 в точности как float или double. База данных сохраняет данные более точно, чем вы привыкли, вот и все.
Если вы хотите сохранить десятичных чисел точно, используйте десятичный тип
.
Дополнительные сведения см. В моих статьях о типах плавающей двоичной точки и плавающей десятичной точки .
Это не проблема базы данных, а общая проблема с плавающей числа