首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift中分离整体部分和分数部分?如何将分数部分转换为Int

如何在Swift中分离整体部分和分数部分?如何将分数部分转换为Int
EN

Stack Overflow用户
提问于 2022-01-29 23:11:47
回答 1查看 84关注 0票数 1

我把小数部分分开了,但是现在我需要用Int来表示这个部分。

例如:

0.5 -> 5

0.63 -> 63

代码语言:javascript
运行
复制
let a1 = 2.5
let a2 = 7.63
let a3 = 8.81
let a4 = 99.0
let a1Frac = a1.truncatingRemainder(dividingBy: 1)
let a2Frac = a2.truncatingRemainder(dividingBy: 1)
let a3Frac = a3.truncatingRemainder(dividingBy: 1)
let a4Frac = a4.truncatingRemainder(dividingBy: 1)
EN

Stack Overflow用户

回答已采纳

发布于 2022-01-30 00:08:39

首先,如果要保持小数位的精度,应该使用Swift Decimal类型。其次,要获得它的分数值,可以检查这个post。一旦你有了你的小数,你所需要的就是得到它们的意义和价值:

代码语言:javascript
运行
复制
extension Decimal {
    func rounded(_ roundingMode: NSDecimalNumber.RoundingMode = .bankers) -> Decimal {
        var result = Decimal()
        var number = self
        NSDecimalRound(&result, &number, 0, roundingMode)
        return result
    }
    var whole: Decimal { self < 0 ? rounded(.up) : rounded(.down) }
    var fraction: Decimal { self - whole }
}

代码语言:javascript
运行
复制
let a1 = Decimal(string: "2.5")!
let a2 = Decimal(string: "7.63")!
let a3 = Decimal(string: "8.81")!
let a4 = Decimal(string: "99")!

let a1Frac = a1.fraction  // 0.5
let a2Frac = a2.fraction  // 0.63
let a3Frac = a3.fraction  // 0.81
let a4Frac = a4.fraction  // 0

let a1significand = a1Frac.significand  // 5
let a2significand = a2Frac.significand  // 63
let a3significand = a3Frac.significand  // 81
let a4significand = a4Frac.significand  // 0

如果需要将Decimal值转换为Int,只需将其转换为NSDecimalNumber并获取其intValue,或者将这些扩展添加到项目中,以便将相同的NSDecimalNumber功能添加到Swift Decimal类型:

代码语言:javascript
运行
复制
extension Decimal {
    var decimalNumber: NSDecimalNumber { self as NSDecimalNumber}
    var intValue: Int { decimalNumber.intValue }
}

代码语言:javascript
运行
复制
a1significand.intValue  // 5
a2significand.intValue  // 63
a3significand.intValue  // 81
a4significand.intValue  // 0
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70910525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档