Does anyone have a method that replicates what the Xojo Format Function does? I don’t want a built-in function, but rather a “long hand” version. What I want to do, if add this feature to my SWIFT String library. It does support the “C” Printf type formats (“%02D” etc), but I want something that works as close to how Xojo does it as possible.
Turns out Swift DOES have such a function after all… (NumberFormatter)
1 Like
Here is my implemetation of Printusing for SWIFT
import Foundation
func printusing(_ number:Int, _ pattern:String) -> String { return printusing(Double(number),pattern) }
func printusing(_ number:Double,_ pattern:String) -> String {
//
// pattern cal be 3 segments <postive>;<negative>;<zero> // zero returns the literal pattern
//
// [#] Placeholder that displays the digit from the value if it is present.
//
// [0] Placeholder that displays the digit from the value if it is present, a Zero otherwise
//
// [+] Displays the plus sign to the left of the number if the number is positive or a minus sign if the number is negative.
//
// [-] Displays a minus sign to the left of the number if the number is negative. There is no effect for positive numbers.
//
// [%] Displays the number multiplied by 100.
//
// [E+0] Displays the number in scientific notation. [the +0 is required]
//
// [**] A double asterisk will pad output
//
var p : [String] = Split(pattern,";")
var _pattern : String = ""
if p.count==1 { p.append(p[0]) }
if p.count==2 { p.append(p[0]) }
if number>0 {
_pattern = p[0]
} else if number<0 {
_pattern = p[1]
} else { _pattern=p[2] } // zero returns literal pattern
if InStr(_pattern,"#")+InStr(_pattern,"0") == 0 { return _pattern }
let numberFormatter = NumberFormatter()
numberFormatter.positiveFormat = _pattern
let output : String = numberFormatter.string(from: NSNumber(value: number))!
return output
//
// NOTE : requires DSString Library
//
}
Example :
let p = "S#.0E+0;######.###;Zero"
print(printusing(+238384579823457239440.38,p))
print(printusing(-238384579823457239440.38,p))
print(printusing(0,p))
Output
S2E+20
-238384579823457240000
Zero