Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本iOS十进制微调_Ios_Swift - Fatal编程技术网

基本iOS十进制微调

基本iOS十进制微调,ios,swift,Ios,Swift,我有浮点值1.96,然后我想把1.9显示为字符串,如果我使用字符串(格式:“%.1f”),结果是2.0,我也尝试使用NumberFormatter作为扩展名 let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.maximumFractionDigits = 1 formatter.minimumFractionDigits = 1 return form

我有浮点值1.96,然后我想把1.9显示为字符串,如果我使用字符串(格式:“%.1f”),结果是2.0,我也尝试使用NumberFormatter作为扩展名

    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.maximumFractionDigits = 1
    formatter.minimumFractionDigits = 1

    return formatter.string(for:  self)!
但结果仍然是2.0

有什么最好的方法可以达到1.96到1.9的水平吗?

老把戏:

var yourResult = Double(floor(10*yourDecimalDigit)/10)

// yourResult = 1.9
像这样转换成字符串

var string = String(yourResult)
老把戏:

var yourResult = Double(floor(10*yourDecimalDigit)/10)

// yourResult = 1.9
像这样转换成字符串

var string = String(yourResult)

可以使用Double的常规扩展来截断Double值

Swift 4.0

extension Double {
    func truncate(places : Int)-> Double {
        return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
    }
}
像下面这样使用它

let trimedValue = 1.96.truncate(places: 1) // 1.9

可以使用Double的常规扩展来截断Double值

Swift 4.0

extension Double {
    func truncate(places : Int)-> Double {
        return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
    }
}
像下面这样使用它

let trimedValue = 1.96.truncate(places: 1) // 1.9

也许有方法可以帮助你,但我喜欢自己做

分机:

extension CGFloat{

    var onlyOneDigits : String {
        var str = "\(self)"
        let count = str.count 
        if self >= 1000 && self < 10000{
            str.removeLast(count - 6)
            return str
        }else if self >= 100{
            str.removeLast(count - 5)
            return str
        }else if self >= 10{
            str.removeLast(count - 4)
            return str
        }else{
            str.removeLast(count - 3)
            return str
        }
    }
}

也许有方法可以帮助你,但我喜欢自己做

分机:

extension CGFloat{

    var onlyOneDigits : String {
        var str = "\(self)"
        let count = str.count 
        if self >= 1000 && self < 10000{
            str.removeLast(count - 6)
            return str
        }else if self >= 100{
            str.removeLast(count - 5)
            return str
        }else if self >= 10{
            str.removeLast(count - 4)
            return str
        }else{
            str.removeLast(count - 3)
            return str
        }
    }
}

如果您想要截断,您可能需要做比四舍五入近似更多的工作,而这正是大多数人所期望的。1.96四舍五入到2.0。在数字格式化程序上设置四舍五入方法。如果要进行截断,则可能需要比四舍五入近似做更多的工作,而这正是大多数人所期望的。1.96四舍五入到2.0。在数字格式化程序上设置四舍五入方法。