格式货币-删除小数

时间:2018-06-27 19:51:22

标签: swift nsnumberformatter

我需要从美分转换为欧元

{
ref: "1dsdsd",
title: "XXXXXX",

price: 92820
},
{
ref: "2ddsds",
title: "XXXXXX",

price: 12830
},
{
ref: "3dsds",
title: "XXXXXXX",
price: 885
} 
]

如果价值是885美分,我们应该读8.85euros,但是 Web服务返回的值不一致:2、3、5位数字

我的解决方案不允许通过删除多余的小数返回欧元值

extension Int {
    func format() -> String {
        let double = Double(self) / 100
        return String(format: "€ %.02f", double)
    }

}

enter image description here

1 个答案:

答案 0 :(得分:2)

请勿尝试使用您自己的代码执行此操作,因为有太多变量需要考虑。而是使用NumberFormatter,将其numberStyle设置为所需的适当货币样式。

如果您的代码未在货币为欧元的语言环境中运行,则可以将格式程序的locale属性设置为它所在的位置– 请勿更改货币符号通过设置currencyCode或相关属性,语言环境会携带有关布局的更多信息。

您的值以整数分为单位,是货币值的不错选择,不幸的是NumberFormatter期望单位为欧元(或英镑等)。您可以通过两种方式解决此问题:(a)在将数字传递给格式化程序之前将其除以100,或者(b)将格式化程序的multiplier属性设置为0.01注意:在后一种情况下,您仍然必须传递要格式化为浮点数的数字(例如Double),否则美分将被截断,这是NumberFormatter 的功能/错误)