Exemples de base (2)
o1 = new stzNumber(11) o1.MultiplyByMany([2, 3]) ? o1.Value()
66
exécuté le 2026-10-02 04:23 dans la bibliothèque au commit 0e72e2e2c ; tiré de 36_value.ring(s'ouvre dans un nouvel onglet)
oM = StzNumberQ("0.1")
oM.MultiplyBy("3")
? oM.Content()
? oM.IsExact()
? 0.1 * 3 = 0.30.3 1 0
exécuté le 2026-10-02 04:25 dans la bibliothèque au commit 0e72e2e2c ; tiré de 07-a-number-that-says-why.en.md(s'ouvre dans un nouvel onglet)
Portée (6)
oPlain = new stzNumber("19.99")
# its regime is machine
? oPlain.Regime()
oPlain.MultiplyBy("0.15")
# ...so it keeps every place the exact arithmetic produced
? oPlain.Content()
# ...and is not money
? oPlain.IsMoney()machine 2.9985 0
exécuté le 2026-10-02 04:23 dans la bibliothèque au commit 0e72e2e2c ; tiré de numeric_regime_narrated.ring(s'ouvre dans un nouvel onglet)
# 2^53 + 1 is 9007199254740993
? (new stzNumber("9007199254740992")).AddQ(1).Content()
# a 32-digit integer gains one correctly
? (new stzNumber("99999999999999999999999999999999")).AddQ(1).Content()
# 999999999 squared is exact
? (new stzNumber("999999999")).MultiplyByQ("999999999").Content()
# a 20-digit product keeps all 40 digits
? (new stzNumber("12345678901234567890")).MultiplyByQ("98765432109876543210").Content()
# small integer arithmetic is untouched
? (new stzNumber("2")).MultiplyByQ("2").Content()9007199254740993 100000000000000000000000000000000 999999998000000001 1219326311370217952237463801111263526900 4
exécuté le 2026-10-02 04:23 dans la bibliothèque au commit 0e72e2e2c ; tiré de numeric_exactness_narrated.ring(s'ouvre dans un nouvel onglet)
tiny = number("1e-20")
oTiny = new stzNumber(tiny)
# the digits are kept
? oTiny.Content()
# ...so the value is still positive
? oTiny.NumericValue() > 0
# ...and scaling it back recovers 1
? oTiny.NumericValue() * number("1e20")
oTiny.MultiplyBy(2)
# it is exact, because the content is a plain decimal the exact path can use
? oTiny.Content()
# ...and says so
? oTiny.IsExact()0.00000000000000000001 1 1 0.00000000000000000002 1
exécuté le 2026-10-02 04:23 dans la bibliothèque au commit 0e72e2e2c ; tiré de numeric_no_loss_narrated.ring(s'ouvre dans un nouvel onglet)
# an exact product knows it
? (new stzNumber("19.99")).MultiplyByQ("0.15").IsExact()
# ...with nothing to explain
? (new stzNumber("19.99")).MultiplyByQ("0.15").Why()
# a big-integer sum knows it
? (new stzNumber("9007199254740992")).AddQ(1).IsExact()
oSqrt = new stzNumber("2")
oSqrt.SquareRoot()
# a square root does not pretend
? oSqrt.IsExact()
# ...and names the reason
? StzFindFirst("no exact decimal result", oSqrt.Why()) > 0
# IsApproximate is its mirror
? oSqrt.IsApproximate()
# Exactness() reports the register
? oSqrt.Exactness()1 1 0 1 1 inexact
exécuté le 2026-10-02 04:23 dans la bibliothèque au commit 0e72e2e2c ; tiré de numeric_exactness_narrated.ring(s'ouvre dans un nouvel onglet)
# 0.1 + 0.2 is 0.3
? (new stzNumber("0.1")).AddQ("0.2").Content()
# 0.1 * 0.1 is 0.01, not 0.0
? (new stzNumber("0.1")).MultiplyByQ("0.1").Content()
# 0.5 * 0.5 is 0.25, not 0.3
? (new stzNumber("0.5")).MultiplyByQ("0.5").Content()
# a price times a rate keeps its cents
? (new stzNumber("19.99")).MultiplyByQ("0.15").Content()
# ...and times a whole number
? (new stzNumber("19.99")).MultiplyByQ(3).Content()
# 0.25 * 0.25 is 0.0625
? (new stzNumber("0.25")).MultiplyByQ("0.25").Content()
# 0.01 * 0.01 is 0.0001
? (new stzNumber("0.01")).MultiplyByQ("0.01").Content()
# 1 + 0.001 is 1.001, not 1.00
? (new stzNumber("1")).AddQ("0.001").Content()
# 0.5 + 0.125 is 0.625, not 0.6
? (new stzNumber("0.5")).AddQ("0.125").Content()
# 10 - 0.001 is 9.999, not 10.00
? (new stzNumber("10")).SubtractQ("0.001").Content()0.3 0.01 0.25 2.9985 59.97 0.0625 0.0001 1.001 0.625 9.999
exécuté le 2026-10-02 04:23 dans la bibliothèque au commit 0e72e2e2c ; tiré de numeric_exactness_narrated.ring(s'ouvre dans un nouvel onglet)
oThird = new stzNumber("1/3")
oThird.Add("2/3")
# a third plus two thirds is ONE
? oThird.Content()
# ...exactly
? oThird.IsExact()
# ...and equals the number 1
? oThird.Same(1)
# a third plus a sixth
? (new stzNumber("1/3")).AddQ("1/6").Content()
# a half less a third
? (new stzNumber("1/2")).SubtractQ("1/3").Content()
# two thirds of three quarters
? (new stzNumber("2/3")).MultiplyByQ("3/4").Content()
# a half divided by a quarter is two
? (new stzNumber("1/2")).DivideQ("1/4").Content()
# every one of those is exact
? (new stzNumber("2/3")).MultiplyByQ("3/4").IsExact()
# a third times three is one
? (new stzNumber("1/3")).MultiplyByQ(3).Content()
# ...and adding zero changes nothing
? (new stzNumber("1/3")).AddQ(0).Content()1 1 1 1/2 1/6 1/2 2 1 1 1/3
exécuté le 2026-10-02 04:23 dans la bibliothèque au commit 0e72e2e2c ; tiré de numeric_rationals_narrated.ring(s'ouvre dans un nouvel onglet)
Les extensions de cette méthode
Chaque extension, et si elle existe pour cette méthode ; une extension qui existe se compose avec les autres (FindSTCS).
Chaque exemple est un fichier de test de la bibliothèque, exécuté dans la bibliothèque pour cette page ; seuls ceux dont la sortie a tenu toutes les promesses écrites par leur fichier sont montrés. Les explications, les titres et le code sont ceux de la bibliothèque, en anglais.
Voir aussi
- La classe stzNumber
- La référence du domaine : Numérique et optimisation
- Les autres méthodes de ces exemples : stzNumber.Add · stzNumber.Divide · stzNumber.Exactness · stzNumber.IsApproximate · stzNumber.IsExact · stzNumber.IsMoney · stzNumber.NumericValue · stzNumber.Regime · stzNumber.Same · stzNumber.SquareRoot · stzNumber.Subtract · stzNumber.WhyNotExact

