什么是从双精度数中删除尾随零的函数?
var double = 3.0 var double2 = 3.10 println(func(double)) // 3 println(func(double2)) // 3.1
字符串
5uzkadbs1#
你可以这样做,但它会返回一个字符串:
var double = 3.0 var double2 = 3.10 func forTrailingZero(_ temp: Double) -> String { var tempVar = String(format: "%g", temp) return tempVar } forTrailingZero(double) //3 forTrailingZero(double2) //3.1
hs1ihplo2#
在Swift 4中,你可以这样做:
extension Double { func removeZerosFromEnd() -> String { let formatter = NumberFormatter() let number = NSNumber(value: self) formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = 16 //maximum digits in Double after dot (maximum precision) return String(formatter.string(from: number) ?? "") } }
字符串使用示例:print (Double("128834.567891000").removeZerosFromEnd())结果:128834.567891你也可以计算你的字符串有多少个十进制数字:
print (Double("128834.567891000").removeZerosFromEnd())
import Foundation extension Double { func removeZerosFromEnd() -> String { let formatter = NumberFormatter() let number = NSNumber(value: self) formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = (self.components(separatedBy: ".").last)!.count return String(formatter.string(from: number) ?? "") } }
型
fnatzsnv3#
当需要默认输出精度时,此方案很好。我们测试该值是否存在潜在的尾随零,并根据它使用不同的输出格式。
extension Double { var stringWithoutZeroFraction: String { return truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(self) } }
字符串(也适用于extension Float,但不适用于Float80)输出量:1.0→“1”0.1→“0.1”0.01→“0.01”0.001 →“0.001”0.0001 →“0.0001”
extension Float
Float80
当需要自定义输出精度时,此方案很好。这个解决方案看起来和NumberFormatter + NSNumber solution from MirekE一样快,但是一个好处是我们在这里避免了NSObject。
extension Double { func string(maximumFractionDigits: Int = 2) -> String { let s = String(format: "%.\(maximumFractionDigits)f", self) for i in stride(from: 0, to: -maximumFractionDigits, by: -1) { if s[s.index(s.endIndex, offsetBy: i - 1)] != "0" { return String(s[..<s.index(s.endIndex, offsetBy: i)]) } } return String(s[..<s.index(s.endIndex, offsetBy: -maximumFractionDigits - 1)]) } }
型(也适用于extension Float,但不适用于Float80)maximumFractionDigits: 2的输出:1.0→“1”0.12→“0.12”0.012 →“0.01”0.0012 →“0”0.00012 →“0”请注意,它执行舍入(与MirekE解决方案相同):0.9950000 →“0.99”0.9950001 →“1”
maximumFractionDigits: 2
lsmepo6l4#
如果您正在寻找如何从字符串中删除尾随零:
string.replacingOccurrences(of: "^([\d,]+)$|^([\d,]+)\.0*$|^([\d,]+\.[0-9]*?)0*$", with: "$1$2$3", options: .regularExpression)
字符串这将把字符串“0.123000000”转换为“0.123”
cwtwac6a5#
我找到的所有答案都很好,但它们都有一些问题,比如生成十进制数时没有0(比如.123而不是0.123)。但这两个人可以毫无问题地完成任务
0
.123
0.123
extension Double { func formatNumberWithFixedFraction(maximumFraction: Int = 8) -> String { let stringFloatNumber = String(format: "%.\(maximumFraction)f", self) return stringFloatNumber } func formatNumber(maximumFraction: Int = 8) -> String { let formatter = NumberFormatter() let number = NSNumber(value: self) formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = maximumFraction formatter.numberStyle = .decimal formatter.allowsFloats = true let formattedNumber = formatter.string(from: number).unwrap return formattedNumber } }
字符串第一个将maxFraction为8的71238.12转换为:71238.12000000,但maxFraction为8的第二个将其转换为:71238.12个
71238.12
71238.12000000
zzzyeukh6#
这一个对我来说很好用,返回文本标签的String
String
func ridZero(result: Double) -> String { let value = String(format: "%g", result) return value }
字符串以下结果
ridZero(result: 3.0) // "3" ridZero(result: 3.5) // "3.5"
6条答案
按热度按时间5uzkadbs1#
你可以这样做,但它会返回一个字符串:
字符串
hs1ihplo2#
在Swift 4中,你可以这样做:
字符串
使用示例:
print (Double("128834.567891000").removeZerosFromEnd())
结果:128834.567891你也可以计算你的字符串有多少个十进制数字:
型
fnatzsnv3#
删除输出中的尾随零
当需要默认输出精度时,此方案很好。我们测试该值是否存在潜在的尾随零,并根据它使用不同的输出格式。
字符串
(也适用于
extension Float
,但不适用于Float80
)输出量:
1.0→“1”
0.1→“0.1”
0.01→“0.01”
0.001 →“0.001”
0.0001 →“0.0001”
使用最大小数位格式化,不带尾随零
当需要自定义输出精度时,此方案很好。这个解决方案看起来和NumberFormatter + NSNumber solution from MirekE一样快,但是一个好处是我们在这里避免了NSObject。
型
(也适用于
extension Float
,但不适用于Float80
)maximumFractionDigits: 2
的输出:1.0→“1”
0.12→“0.12”
0.012 →“0.01”
0.0012 →“0”
0.00012 →“0”
请注意,它执行舍入(与MirekE解决方案相同):
0.9950000 →“0.99”
0.9950001 →“1”
lsmepo6l4#
如果您正在寻找如何从字符串中删除尾随零:
字符串
这将把字符串“0.123000000”转换为“0.123”
cwtwac6a5#
我找到的所有答案都很好,但它们都有一些问题,比如生成十进制数时没有
0
(比如.123
而不是0.123
)。但这两个人可以毫无问题地完成任务字符串
第一个将maxFraction为8的
71238.12
转换为:71238.12000000
,但maxFraction为8的第二个将其转换为:71238.12
个zzzyeukh6#
这一个对我来说很好用,返回文本标签的
String
字符串
以下结果
型