我想创建一个查看字符串的函数,如果它是一个十进制字符串,则将其作为货币格式的字符串返回。下面的函数可以做到这一点,但是如果我传入一个已经格式化的字符串,它当然会失败(它希望看到像' 25'或&#39这样的字符串; 25.55'但不' $ 15.25'
有没有办法在下面修改我的功能,添加另一个条件,说明"如果您已经格式化为货币字符串,或者您的字符串格式不正确,请返回X&# 34; (也许X将是0,或者它可能是自我(相同的字符串)我还不确定)。
func toCurrencyStringFromDecimalString() -> String
{
var numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
if (self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).utf16Count == 0)
{
//If whitespace is passed in, just return 0.0 as default
return numberFormatter.stringFromNumber(NSDecimalNumber(string: "0.0"))!
}
else if (IS_NOT_A_DECIMAL_OR_ALREADY_A_CURRENCY_STRING)
{
//So obviously this would go here to see if it's not a decimal (or already contains a current placeholder etc)
}
else
{
return numberFormatter.stringFromNumber(NSDecimalNumber(string: self))!
}
}
感谢您的帮助!
答案 0 :(得分:2)
听起来你需要使用NSScanner
。
根据docs,scanDecimal
的{{1}}函数:
在溢出的情况下跳过多余的数字,所以接收器的 position超过整个整数表示。
以NULL作为值调用此方法,以便只扫描十进制整数表示。
我一直主要用Obj-C编程,所以我的Swift是垃圾,但这是我试图翻译用于检测数字字符串的相应代码(也在this answer中演示):
NSScanner
如果字符串不是十进制表示,let scanner: NSScanner = NSScanner(string:self)
let isNumeric = scanner.scanDecimal(nil) && scanner.atEnd
应该返回false。