gpt4 book ai didi

ios - 有什么方法可以在 swift 4 中迭代 double var 的小数部分吗?

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:14 24 4
gpt4 key购买 nike

我在找什么:

给定一个 Double (doublenumber) 和一个 Int (n),我希望遍历第 1 位小数、第 2 位小数、第 3 位小数、第 4 位小数....直到第 n 位小数

我的第一个方法是,转换为 String the Double 这样我就可以像数组一样迭代字符串,但问题是当我转换为字符串时我丢失了许多小数

    let doubleNumber = 1.00/98                  //0.010204081632653061224489795918367346938775510204081632653...
var stringFromDouble = String(doubleNumber) //0.010204081632653
stringFromDouble.removeFirst() //.010204081632653
stringFromDouble.removeFirst() //010204081632653

for letter in stringFromDouble{
//cycle to iterate the decimals
}

最佳答案

如果目的是获取1.0/98.0许多 十进制数字,那么您不得将该数字存储在第一个Double 中位置,因为它只有大约 16 位十进制数字的精度。您可以使用精度为 38 位十进制数字的 Decimal

但是对于更多的小数位数,您必须进行“有理算术”,即将分数的分子和分母作为整数。

下面是如何打印有理数的任意多位小数。为简单起见,我假设该数字为正且小于一。

func printDecimalDigits(of numerator: Int, dividedBy denominator: Int, count: Int) {
var numerator = numerator
for _ in 1...count {
// Multiply by 10 to get the next digit:
numerator *= 10
// Print integer part of `numerator/denominator`:
print(numerator / denominator, terminator: "")
// Reduce `numerator/denominator` to its fractional part:
numerator %= denominator
}
print()
}

例子:

printDecimalDigits(of: 1, dividedBy: 98, count: 100)
// 0102040816326530612244897959183673469387755102040816326530612244897959183673469387755102040816326530

或者作为一个函数返回数字作为(惰性求值)序列:

func decimalDigits(of numerator: Int, dividedBy denominator: Int) -> AnySequence<Int> {
return AnySequence(sequence(state: numerator) { num -> Int in
num *= 10
let d = num / denominator
num %= denominator
return d
})
}

例子:

let first1000Digits = decimalDigits(of: 1, dividedBy: 98).prefix(1000)
for d in first1000Digits { print(d) }

关于ios - 有什么方法可以在 swift 4 中迭代 double var 的小数部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56810461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com