Swift:找出一个整数有多少位数



我没有合适的英语或数学词汇来真正解释我想做什么,但我会尽力解释。基本上我想弄清楚";"有多大";整数是指它有多少个小数位数。例如1234是";一千";2987123是"数字";一百万";数字

我可以做这样的事情,但那太傻了:(

extension Int {
func size() -> Int {
switch self {
case 0...99:
return 10
case 100...999:
return 100
case 1000...9999:
return 1000
case 10000...99999:
return 10000
case 100000...999999:
return 100000
case 1000000...9999999:
return 1000000
default:
return 0 // where do we stop?
}
}
}

使用对数的解决方案:

注意:由于Double无法完全表示转换为Double的大型Intlog10,因此此解决方案具有局限性。它在15岁左右开始出现故障Int的数字非常接近10的下一次幂(例如。999999999999999(。

这是一个问题:

log10(Double(999999999999999)) == log10(Double(1000000000000000))
extension Int {
var size: Int {
self == 0 ? 1 : Int(pow(10.0, floor(log10(abs(Double(self))))))
}
}

使用字符串的解决方案:

它通过完全使用IntString来避免任何数学表示错误。

extension Int {
var size: Int {
Int("1" + repeatElement("0", count: String(self.magnitude).count - 1))!
}
}

任何FixedWidthInteger:的通用版本

在与@LeoDabus的合作中,我为任何整数类型提供了通用版本:

extension FixedWidthInteger {
var size: Self {
Self("1" + repeatElement("0", count: String(self.magnitude).count - 1))!
}
}

示例:

Int8.max.size     // 100
Int16.max.size    // 10000
Int32.max.size    // 1000000000
Int.max.size      // 1000000000000000000
UInt.max.size     // 10000000000000000000

我想到了这个:

extension Int {
func size() -> Int {
var size = 1
var modifyingNumber = self
while modifyingNumber > 10 {
modifyingNumber = modifyingNumber / 10
size = size * 10
}
return size
}
}

行得通,但这是非常必要的。

这太傻了吗?

extension Int {
var size : Int {
String(self).count
}
}

我的理由是;数字";实际上的一种书写方式,因此转换为String可以回答真正的问题。将大小转换回数字(即10的相应幂(,当然会直接返回对数答案。:(

最新更新