You could pass the string through a decimal formatter to get the underlying number, and then back again through the formatter to get a formatted string:
let amount = "123,456,789"
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
let number = formatter.number(from: amount)
let newAmountString = formatter.string(from: number!)  //"123,456,789.00"
(You should check that number is not nil before force unwrapping it, with if letor guard)
You could wrap this in a function:
func zeroPadding(toString: String) -> String? {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.maximumFractionDigits = 2
    formatter.minimumFractionDigits = 2
    guard let number = formatter.number(from: toString) else {
        return nil
    }
    return formatter.string(from: number)
}
Here are some test cases:
zeroPadding(toString: "123,456,789")         //"123,456,789.00"
zeroPadding(toString: "123,456,789.0")       //"123,456,789.00"
zeroPadding(toString: "123,456,789.10")      //"123,456,789.10"
zeroPadding(toString: "123,456,789.123")     //"123,456,789.12"
zeroPadding(toString: "123.4567")            //"123.46"
zeroPadding(toString: "Price: 1€ for a ")  //nil
Or define it as an extension on String:
extension String {
    func withZeroPadding() -> String? {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = 2
        formatter.minimumFractionDigits = 2
        guard let number = formatter.number(from: self) else {
            return nil
        }
        return formatter.string(from: number)
    }
}
And use it like this:
"123.4.4.5".withZeroPadding()    //nil 
"12.".withZeroPadding()          //"12.00"
"123,456,789".withZeroPadding()  //"123,456,789.00"