Swift:在执行一些数学运算后,将String转换为Float并再次返回String

时间:2018-04-17 03:58:39

标签: ios swift floating-point floating-accuracy

我一直在谷歌搜索并试图了解Swift价值观如何与swift合作,但似乎无法理解它,我真的很感激任何帮助,我觉得我只是浪费我的时间

例如,假设我有一个返回一些json数据的API,我解析该数据,进行一些计算,然后向用户提供一些数据,如下所示:

let balance : String = "773480.67"        // value that was received through json api
let commission : String = "100000.00"     // value that was received through json api

//framework maps the json properties
let floatBalance : Float = Float(balance)!     // at this point value is 773480.688
let floatCommission :  Float = Float(commission)!  //100000.0

//we do some math with the values
let result : Float = floatBalance + floatCommission    // this is somehow 873480.687

//and then show some of the values on a label
print("stringBalance: \(balance)")                     //stringBalance: 773480.67
print("floatBalance: \(floatBalance)")                 //floatBalance: 773481.0
print("floatCommission: \(floatCommission)")           //floatCommission: 100000.0
print("result: \(result)")                             //result: 873481.0
print("label: \(String(format:"%.2f", result))")       //label: 873480.69
print("just kill me now")

我正在使用EVReflection框架将json属性映射到一个对象,所以从String到Float的转换是在后台完成的,我没有做太多关于它的事情,但上面显示的值基本上是什么我正在使用。

我的问题是,最后我需要做什么才能从生成的浮动(873480.67)中获取正确的字符串(873480.687),或者从一开始我的方法是错误的?

谢谢

1 个答案:

答案 0 :(得分:1)

实际上浮点数不能准确表示数字,你必须使用Double。 这是一个关于这个问题的非常好的答案: https://stackoverflow.com/a/3730040/4662531

编辑:

很抱歉,但实际上Double不应该用于执行计算(我假设从你的变量命名你正在处理一些银行业务)。以上链接答案的这一部分确实给出了一个很好的建议:

  

几乎适用于任何语言的解决方案是使用整数   相反,并计算美分。例如,1025将是10.25美元。一些   语言也有内置的类型来处理钱。其中,   Java有BigDecimal类,C#有小数类型。

我的一位曾经在一家银行公司工作过的同事也确认所有计算都是在不使用Floats或Double的情况下完成的,但是在链接中建议使用Int。