四舍五入到小数点后两位
Round up double to 2 decimal places
如何将 currentRatio
四舍五入到小数点后两位?
let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = "\(currentRatio)"
使用格式字符串四舍五入到小数点后两位并将 double
转换为 String
:
let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = String(format: "%.2f", currentRatio)
示例:
let myDouble = 3.141
let doubleStr = String(format: "%.2f", myDouble) // "3.14"
如果你想将最后一位小数四舍五入,你可以这样做(感谢 Phoen1xUK):
let myDouble = 3.141
let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"
如果我们想多次格式化 Double,请添加到上面的答案中,我们可以使用 Double 的协议扩展,如下所示:
extension Double {
var dollarString:String {
return String(format: "$%.2f", self)
}
}
let a = 45.666
print(a.dollarString) //will print ".67"
考虑为此目的使用 NumberFormatter,如果您想打印比率的百分号或者如果您有货币和大数字之类的东西,它会提供更大的灵活性。
let amount = 10.000001
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
let formattedAmount = formatter.string(from: amount as NSNumber)!
print(formattedAmount) // 10
String(format: "%.2f", Double(round(1000*34.578)/1000))
输出:34.58
小数点后特定数字的代码是:
var roundedString = String(format: "%.2f", currentRatio)
这里的 %.2f 告诉 swift 将这个数字四舍五入到小数点后两位。
已更新至 SWIFT 4 以及问题的正确答案
如果你想四舍五入到小数点后两位,你应该乘以 100 然后四舍五入,然后除以 100
var x = 1.5657676754
var y = (x*100).rounded()/100
print(y) // 1.57
只需一行代码:
let obj = self.arrayResult[indexPath.row]
let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!])
如果你给它 234.545332233 它会给你 234.54
let textData = Double(myTextField.text!)!
let text = String(format: "%.2f", arguments: [textData])
mylabel.text = text
(Swift 4.2 Xcode 11)
简单易用扩展名:-
extension Double {
func round(to places: Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
使用:-
if let distanceDb = Double(strDistance) {
cell.lblDistance.text = "\(distanceDb.round(to:2)) km"
}
像我这样的菜鸟的快速跟进回答:
您可以通过使用带有输出 的函数使其他答案变得非常容易实现。例如
func twoDecimals(number: Float) -> String{
return String(format: "%.2f", number)
}
这样,只要你想获取一个小数点后 2 位的值,你只需键入
twoDecimals('这里是你的号码')
...
简单!
P.s。您还可以将其 return 设为 Float 值,或任何您想要的值,然后在字符串转换后再次转换它,如下所示:
func twoDecimals(number: Float) -> Float{
let stringValue = String(format: "%.2f", number)
return Float(stringValue)!
}
希望对您有所帮助。
@Rounded, 一个 swift 5.1 属性 包装器
示例:
struct GameResult {
@Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4)
var score: Decimal
}
var result = GameResult()
result.score = 3.14159265358979
print(result.score) // 3.1416
也许还有:
// Specify the decimal place to round to using an enum
public enum RoundingPrecision {
case ones
case tenths
case hundredths
case thousands
}
extension Double {
// Round to the specific decimal place
func customRound(_ rule: FloatingPointRoundingRule, precision: RoundingPrecision = .ones) -> Double {
switch precision {
case .ones: return (self * Double(1)).rounded(rule) / 1
case .tenths: return (self * Double(10)).rounded(rule) / 10
case .hundredths: return (self * Double(100)).rounded(rule) / 100
case .thousands: return (self * Double(1000)).rounded(rule) / 1000
}
}
}
let value: Double = 98.163846
print(value.customRound(.toNearestOrEven, precision: .ones)) //98.0
print(value.customRound(.toNearestOrEven, precision: .tenths)) //98.2
print(value.customRound(.toNearestOrEven, precision: .hundredths)) //98.16
print(value.customRound(.toNearestOrEven, precision: .thousands)) //98.164
保留小数,不截断而是舍入
试试这个,你会得到比 0.0 更好的结果
extension Double {
func rounded(toPlaces places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
func toRoundedString(toPlaces places:Int) -> String {
let amount = self.rounded(toPlaces: places)
let str_mount = String(amount)
let sub_amountStrings = str_mount.split(separator: ".")
if sub_amountStrings.count == 1
{
var re_str = "\(sub_amountStrings[0])."
for _ in 0..<places
{
re_str += "0"
}
return re_str
}
else if sub_amountStrings.count > 1, "\(sub_amountStrings[1])".count < places
{
var re_str = "\(sub_amountStrings[0]).\(sub_amountStrings[1])"
let tem_places = (places - "\(sub_amountStrings[1])".count)
for _ in 0..<tem_places
{
re_str += "0"
}
return re_str
}
return str_mount
}
}
如何将 currentRatio
四舍五入到小数点后两位?
let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = "\(currentRatio)"
使用格式字符串四舍五入到小数点后两位并将 double
转换为 String
:
let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = String(format: "%.2f", currentRatio)
示例:
let myDouble = 3.141
let doubleStr = String(format: "%.2f", myDouble) // "3.14"
如果你想将最后一位小数四舍五入,你可以这样做(感谢 Phoen1xUK):
let myDouble = 3.141
let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"
如果我们想多次格式化 Double,请添加到上面的答案中,我们可以使用 Double 的协议扩展,如下所示:
extension Double {
var dollarString:String {
return String(format: "$%.2f", self)
}
}
let a = 45.666
print(a.dollarString) //will print ".67"
考虑为此目的使用 NumberFormatter,如果您想打印比率的百分号或者如果您有货币和大数字之类的东西,它会提供更大的灵活性。
let amount = 10.000001
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
let formattedAmount = formatter.string(from: amount as NSNumber)!
print(formattedAmount) // 10
String(format: "%.2f", Double(round(1000*34.578)/1000))
输出:34.58
小数点后特定数字的代码是:
var roundedString = String(format: "%.2f", currentRatio)
这里的 %.2f 告诉 swift 将这个数字四舍五入到小数点后两位。
已更新至 SWIFT 4 以及问题的正确答案
如果你想四舍五入到小数点后两位,你应该乘以 100 然后四舍五入,然后除以 100
var x = 1.5657676754
var y = (x*100).rounded()/100
print(y) // 1.57
只需一行代码:
let obj = self.arrayResult[indexPath.row]
let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!])
如果你给它 234.545332233 它会给你 234.54
let textData = Double(myTextField.text!)!
let text = String(format: "%.2f", arguments: [textData])
mylabel.text = text
(Swift 4.2 Xcode 11) 简单易用扩展名:-
extension Double {
func round(to places: Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
使用:-
if let distanceDb = Double(strDistance) {
cell.lblDistance.text = "\(distanceDb.round(to:2)) km"
}
像我这样的菜鸟的快速跟进回答:
您可以通过使用带有输出 的函数使其他答案变得非常容易实现。例如
func twoDecimals(number: Float) -> String{
return String(format: "%.2f", number)
}
这样,只要你想获取一个小数点后 2 位的值,你只需键入
twoDecimals('这里是你的号码')
...
简单!
P.s。您还可以将其 return 设为 Float 值,或任何您想要的值,然后在字符串转换后再次转换它,如下所示:
func twoDecimals(number: Float) -> Float{
let stringValue = String(format: "%.2f", number)
return Float(stringValue)!
}
希望对您有所帮助。
@Rounded, 一个 swift 5.1 属性 包装器 示例:
struct GameResult {
@Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4)
var score: Decimal
}
var result = GameResult()
result.score = 3.14159265358979
print(result.score) // 3.1416
也许还有:
// Specify the decimal place to round to using an enum
public enum RoundingPrecision {
case ones
case tenths
case hundredths
case thousands
}
extension Double {
// Round to the specific decimal place
func customRound(_ rule: FloatingPointRoundingRule, precision: RoundingPrecision = .ones) -> Double {
switch precision {
case .ones: return (self * Double(1)).rounded(rule) / 1
case .tenths: return (self * Double(10)).rounded(rule) / 10
case .hundredths: return (self * Double(100)).rounded(rule) / 100
case .thousands: return (self * Double(1000)).rounded(rule) / 1000
}
}
}
let value: Double = 98.163846
print(value.customRound(.toNearestOrEven, precision: .ones)) //98.0
print(value.customRound(.toNearestOrEven, precision: .tenths)) //98.2
print(value.customRound(.toNearestOrEven, precision: .hundredths)) //98.16
print(value.customRound(.toNearestOrEven, precision: .thousands)) //98.164
保留小数,不截断而是舍入
试试这个,你会得到比 0.0 更好的结果
extension Double {
func rounded(toPlaces places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
func toRoundedString(toPlaces places:Int) -> String {
let amount = self.rounded(toPlaces: places)
let str_mount = String(amount)
let sub_amountStrings = str_mount.split(separator: ".")
if sub_amountStrings.count == 1
{
var re_str = "\(sub_amountStrings[0])."
for _ in 0..<places
{
re_str += "0"
}
return re_str
}
else if sub_amountStrings.count > 1, "\(sub_amountStrings[1])".count < places
{
var re_str = "\(sub_amountStrings[0]).\(sub_amountStrings[1])"
let tem_places = (places - "\(sub_amountStrings[1])".count)
for _ in 0..<tem_places
{
re_str += "0"
}
return re_str
}
return str_mount
}
}