1

Нужно сохранить большое целое число (больше максимального значения Double) без потери точности в программе, а потом вывести его в консоль.

Например:

x = 135301852344706746049.0
print(String(format:"%f", x)) // 135301852344706744320.000000
xhr
  • 1,159
  • 9
  • 23
  • 44
  • Не используйте тип Double? – VladD Dec 05 '17 at 13:09
  • что использовать, если не Double? (в примере Double) – xhr Dec 05 '17 at 13:14
  • а чем вас не устраивает точность Double ? – Andrey Iskamov Dec 05 '17 at 13:28
  • Точности Double не хватает. В примере выше число сохранено в Double. При выводе видно, что происходит потеря точности (см. на последние значащие цифры). – xhr Dec 05 '17 at 13:34
  • А тип long double в свифте есть? Или его точность тоже недостаточна? А длинная арифметика есть? – Тарас Атавин Nov 09 '22 at 03:59

2 Answers2

3

Можно взять библиотеку, к примеру, эту:

https://github.com/mkrd/Swift-Big-Integer

Или поискать другие, если эта не подойдёт.

Son'ka V
  • 337
2

Есть лучшее решение - использовать тип Decimal

Пример:

let a: Decimal? = Decimal(string: "135301852344706746049")
print(a!) // 135301852344706746049 // нет потери точности

let b: Decimal? = Decimal(string: "83621143489848422977")
print(a! + b!) // 218922995834555169026 // сложение выполнено верно
xhr
  • 1,159
  • 9
  • 23
  • 44