Für viele Anwendungen benötigen Sie eine genaue Anzahl von Dezimalstellen zum Runden.
Für einige andere haben Sie keine solche Einschränkung und möchten die Ausgabegröße "komprimieren", möchten jedoch dennoch vermeiden, die Zahl in Zeichenfolgen umzuwandeln (und später wieder zurück), z. B. beim Exportieren von JSON mit Millionen von Zahlen.
In diesem Fall können Sie einen 'Trick' anwenden, um den Vorkommabereich (Mantisse) und nicht die ganze Zahl zu runden. In einem solchen Fall werden Sie mit den endgültigen Dezimalstellen enden, und die meisten Zahlen werden weiterhin höchstens z. B. 3 Dezimalstellen (wenn nötig) beibehalten, während einige leicht mehr haben werden.
Das ist das, was Sie mit diesem Ansatz erwarten können, während Sie immer noch mit Dezimalzahlen arbeiten:
5.2472
5.2516
5.2556
5.26
5.264
anstatt von:
5.24731462499949
5.251488374999099
5.25566283399894
5.259839374999501
5.264012208999702
let value = 5.24731462499949
print(value)
// 5.24731462499949
let valueSignificandRounded = round((1000 * 10) * value.significand) / (1000 * 10)
let valueRounded = CGFloat(sign: v.sign, exponent: v.exponent, significand: valueSignificandRounded)
print(valueRounded)
// 5.2472