Swift 将浮点转换为字符串时的额外垃圾值

Swift 将浮点转换为字符串时的额外垃圾值,swift,Swift,我在玩浮点数,并将浮点数显式转换为所需的类型。我得到的是,当你把一个浮点数转换成字符串时,会出现一些垃圾数据。为什么会这样 这是我的密码: let a:Float = 5.23 var fName = "john" var lName = "doe" var fullName = fName + lName var mixedString = fullName + String(a) print(mixedString) 这将johndoe5.23000001907349作为输出。额外的19

我在玩浮点数,并将浮点数显式转换为所需的类型。我得到的是,当你把一个浮点数转换成字符串时,会出现一些垃圾数据。为什么会这样

这是我的密码:

let a:Float = 5.23

var fName = "john"
var lName = "doe"
var fullName = fName + lName
var mixedString = fullName + String(a)
print(mixedString)

这将
johndoe5.23000001907349
作为输出。额外的
1907349

Float
类型不是非常精确,因此不精确会给您带来一些额外的垃圾。如果省略
Float
类型声明,则会得到一个
Double
,而不会出现此问题

let a = 5.23

var fName = "john"
var lName = "doe"
var fullName = fName + lName
var mixedString = fullName + String(a)
print(mixedString)
// prints "johndoe5.23"

考虑钻头深度以及它如何限制精度。有一个无限范围的实数,只有有限的存储位。这是所有当前计算机系统的原因。可能的重复项您也可以明确地将a声明为
Double
让a:Double=5.23
,但这不会产生安全问题吗?这会如何产生安全问题?一个double和一个float都代表浮点数,double只有两倍的位数来保存这个数字,所以你可以得到更高的精度(和范围)。使用一种类型而不是另一种类型不应该有任何安全影响。我想他是说使用Float并获得5.23000001907349而不是5.23会导致安全问题。@GokhanArik是的。这就是我的意思。它存储垃圾的价值。所以它可能是一种安全威胁?