Ios 如何在swift上格式化2位小数双精度类型

Ios 如何在swift上格式化2位小数双精度类型,ios,swift,Ios,Swift,我的双精度值是7.92021,我想将其更改为7.92(双精度类型)。 我尝试了3种方法,但都没有成功 代码1: let d1:Double = 7.92012 let d2 = Double(String(format: ".2f", d1)) // the result d2 = 7.92000000000002 let d1:Double = 7.92012 let value = NSDecimalNumber(double: d1) value.decimalNumberByAddi

我的双精度值是7.92021,我想将其更改为7.92(双精度类型)。 我尝试了3种方法,但都没有成功

代码1:

let d1:Double = 7.92012
let d2 = Double(String(format: ".2f", d1)) 
// the result d2 = 7.92000000000002
let d1:Double = 7.92012
let value = NSDecimalNumber(double: d1)
value.decimalNumberByAdding(2)
let result = value.doubleValue
// the result = 7.92000000000002
代码2:

let d1:Double = 7.92012
let d2 = Double(String(format: ".2f", d1)) 
// the result d2 = 7.92000000000002
let d1:Double = 7.92012
let value = NSDecimalNumber(double: d1)
value.decimalNumberByAdding(2)
let result = value.doubleValue
// the result = 7.92000000000002
代码3:

let d1:Double = 7.92012
let d2 = round( d1 * 100 ) / 100
// d2 = 7.92000000000002

如何使结果值为7.92(双精度类型)?

第三个代码段工作得非常好。我不明白你为什么要面对这样的问题。这取决于你想做什么,结果如何。如果只是想在UI中显示,则将其转换为带有
NSNumberFormatter
的字符串(类似于
string(format:)
,但是本地化的)。如果您计划以后使用它进行算术运算,请使用
NSDecimalNumber
,而不是
Double
。了解十进制和字符串之间的区别。只有字符串的小数位数有限。@Sulthan-字符串不是小数位数有限的唯一方法。这就是
NSDecimalNumber
旨在解决的问题。但是,是的,一般来说,如果只是在UI中显示结果,那么字符串表示通常是最简单的解决方案。我不明白你为什么要面对这样的问题。这取决于你想做什么,结果如何。如果只是想在UI中显示,则将其转换为带有
NSNumberFormatter
的字符串(类似于
string(format:)
,但是本地化的)。如果您计划以后使用它进行算术运算,请使用
NSDecimalNumber
,而不是
Double
。了解十进制和字符串之间的区别。只有字符串的小数位数有限。@Sulthan-字符串不是小数位数有限的唯一方法。这就是
NSDecimalNumber
旨在解决的问题。但是,是的,一般来说,如果只是在UI中显示结果,那么字符串表示通常是最简单的解决方案。