Oran Matematik Fonksiyonları
Bu fonksiyonlar, bir miktara bir **** (bir kesir) uygulamanıza imkan tanır; bir miktarı iki doğal sayının oranı ile çarpar veya böler.
Oran matematik fonksiyonlarının içe aktarılması gereklidir.
assertIsRatio(ratio)
- ratio: ****
- Dönüş: Yok.
Geçersiz bir Oran argümanı verildiğinde bir hata fırlatır.
Hata mesajları:
- Oran ${ratio} 2 alandan oluşan bir kayıt olmalıdır.
- Parametre bir Oran kaydı olmalıdır, ancak ${ratio} ${q(name)} içeriyor.
assertIsRatio(aRatio);
makeRatio(numerator, numeratorBrand, denominator?, denominatorBrand?)
- numerator: BigInt
- numeratorBrand: ****
- denominator: BigInt - İsteğe bağlı, varsayılan 100n.
- denominatorBrand: Marka - İsteğe bağlı, varsayılan numeratorBrand değeridir.
- Dönüş: ****
Fonksiyona geçilen argümanlara dayanan bir Oran döner.
Varsayılan olarak, denominator 100n'dir (yani, Oran bir yüzdedir).
// Varsayılan değerleri kullanarak 50 / 100 Quatloos oranı oluştur
const ratio = makeRatio(50n, quatloosBrand);
// Tüm değerleri belirterek 75 Quatloos / 4 Moolas oranı oluştur (geçerli döviz kuru)
const ratio = makeRatio(75n, quatloosBrand, 4n, moolasBrand);
makeRatioFromAmounts(numeratorAmount, denominatorAmount)
- numeratorAmount: ****
- denominatorAmount: Miktar
- Dönüş: ****
Değişmez iki Miktar'dan oluşan bir kesiri temsil eden bir Oran döner. numeratorAmount Oran'ın payı, denominatorAmount ise Oran'ın paydasıdır.
const fiftyCents = AmountMath.make(centsBrand, 50n);
const dollar = AmountMath.make(centsBrand, 100n);
const halfADollar = makeRatioFromAmounts(fiftyCents, dollar);
floorMultiplyBy(amount, ratio)
- amount: ****
- ratio: ****
- Dönüş: Miktar
Değişmez bir Miktar döner. ** oran'ın paydası olan Marka'dır. Not: Paydanın Marka'sı, amount Marka**'sı ile aynı olmalıdır.
Sonuç Miktar'ı şu şekilde belirlenir:
- amount değerini oran'ın payının değeriyle çarpma.
- Adım 1'den elde edilen sonucu oran'ın paydasının değeriyle bölme.
- Eğer bu bir tam sayı ise, bu değer döner. Aksi halde değer bir alt tam sayıya yuvarlanır.
Örneğin, eğer amount değeri 47 ve oran 3 / 5 ise, hesaplama şöyle olacaktır:
- 47 * 3 = 141
- 141 / 5 = 28.2
- Floor(28.2) = 28
Hata mesajlarıyla hatalar fırlatır:
- Bir miktar bekleniyor: ${amount}: İlk argüman bir Miktar değil.
- amount'ın markası ${q(amount.brand)} oranının paydası ${q(ratio.denominator.brand)} ile eşleşmelidir: Miktar ve oran paydasının aynı markaya sahip olması gerekir.
const exchangeRatio = makeRatio(3n, swissFrancBrand, 5n, dollarBrand);
const dollars47 = AmountMath.make(dollarBrand, 47n);
// 28 İsviçre frangı miktarını döner
const exchange = floorMultiplyBy(dollars47, exchangeRatio);
ceilMultiplyBy(amount, ratio)
- amount: ****
- ratio: ****
- Dönüş: Miktar
Değişmez bir Miktar döner. ** oran'ın payının Marka'sıdır. Not: Paydanın Marka'sı, amount Marka**'sı ile aynı olmalıdır.
Sonuç Miktar'ı şu şekilde belirlenir:
- amount değerini oran'ın payının değeriyle çarpma.
- Adım 1'den elde edilen sonucu oran'ın paydasının değeriyle bölme.
- Eğer bu bir tam sayı ise, bu değer döner. Aksi halde değer bir üst tam sayıya yuvarlanır.
Örneğin, eğer amount değeri 47 ve oran 3 / 5 ise, hesaplama şöyle olacaktır:
- 47 * 3 = 141
- 141 / 5 = 28.2
- Ceiling(28.2) = 29
Hata mesajlarıyla hatalar fırlatır:
- Bir miktar bekleniyor: ${amount}: İlk argüman bir Miktar değil.
- amount'ın markası ${q(amount.brand)} oranının payı ${q(ratio.denominator.brand)} ile eşleşmelidir: Miktar ve oran paydasının aynı markaya sahip olması gerekir.
const exchangeRatio = makeRatio(3n, swissFrancBrand, 5n, dollarBrand);
const dollars47 = AmountMath.make(dollarBrand, 47n);
// 29 İsviçre frangı miktarını döner
const exchange = ceilMultiplyBy(dollars47, exchangeRatio);
multiplyBy(amount, ratio)
- amount: ****
- ratio: ****
- Dönüş: Miktar
Değişmez bir Miktar döner. ** oran'ın payının Marka'sıdır. Not: Paydanın Marka'sı, amount Marka**'sı ile aynı olmalıdır.
Sonuç Miktar'ı şu şekilde belirlenir:
- amount değerini oran'ın payının değeriyle çarpma.
- Adım 1'den elde edilen sonucu oran'ın paydasının değeriyle bölme.
- Eğer bu bir tam sayı ise, bu değer döner. Aksi halde değer, göre en yakına yuvarlanır.
Örneğin, eğer amount değeri 47 ve oran 3 / 5 ise, hesaplama şöyle olacaktır:
- 47 * 3 = 141
- 141 / 5 = 28.2
- BankersRounding(28.2) = 28
Hata mesajlarıyla hatalar fırlatır:
- Bir miktar bekleniyor: ${amount}: İlk argüman bir Miktar değil.
- amount'ın markası ${q(amount.brand)} oranının payı ${q(ratio.denominator.brand)} ile eşleşmelidir: Miktar ve oran paydasının aynı markaya sahip olması gerekir.
const exchangeRatio = makeRatio(3n, swissFrancBrand, 5n, dollarBrand);
const dollars47 = AmountMath.make(dollarBrand, 47n);
// 28 İsviçre frangı miktarını döner
const exchange = multiplyBy(dollars47, exchangeRatio);
floorDivideBy(amount, ratio)
- amount: ****
- ratio: ****
- Dönüş: Miktar
Değişmez bir Miktar döner. ** oran'ın paydasının Marka**'sıdır.
Sonuç değerinin belirlenmesi şu şekildedir:
- amount değerini oran'ın paydasının değeriyle çarpma.
- Adım 1'den elde edilen sonucu oran'ın payının değeriyle bölme.
- Eğer bu bir tam sayı ise, bu değer döner. Aksi halde değer bir alt tam sayıya yuvarlanır.
Örneğin, eğer amount değeri 47 ve oran 3 / 5 ise, hesaplama şöyle olacaktır:
- 47 * 5 = 235
- 235 / 3 = 78.33333...
- Floor(78.3333...) = 78
Hata mesajlarıyla hatalar fırlatır:
- Bir miktar bekleniyor: ${amount}: İlk argüman bir Miktar değil.
- amount'ın markası ${q(amount.brand)} oranının payı ${q(ratio.numerator.brand)} ile eşleşmelidir: Miktar ve oran payının aynı markaya sahip olması gerekir.
const exchangeRatio = makeRatio(3n, swissFrancBrand, 5n, dollarBrand);
const dollars47 = AmountMath.make(dollarBrand, 47n);
// 78 dolarlık bir miktar döner
const exchange = floorDivideBy(dollars47, exchangeRatio);
ceilDivideBy(amount, ratio)
- amount: ****
- ratio: ****
- Dönüş: Miktar
Değişmez bir Miktar döner. ** oran'ın paydasının Marka**'sıdır.
Sonuç değerinin belirlenmesi şu şekildedir:
- amount değerini oran'ın paydasının değeriyle çarpma.
- Adım 1'den elde edilen sonucu oran'ın payının değeriyle bölme.
- Eğer bu bir tam sayı ise, bu değer döner. Aksi halde değer bir üst tam sayıya yuvarlanır.
Örneğin, eğer amount değeri 47 ve oran 3 / 5 ise, hesaplama şöyle olacaktır:
- 47 * 5 = 235
- 235 / 3 = 78.33333...
- Ceiling(78.3333...) = 79
Hata mesajlarıyla hatalar fırlatır:
- Bir miktar bekleniyor: ${amount}: İlk argüman bir Miktar değil.
- amount'ın markası ${q(amount.brand)} oranının payı ${q(ratio.numerator.brand)} ile eşleşmelidir: Miktar ve oran payının aynı markaya sahip olması gerekir.
const exchangeRatio = makeRatio(3n, swissFrancBrand, 5n, dollarBrand);
const dollars47 = AmountMath.make(dollarBrand, 47n);
// 79 dolarlık bir miktar döner
const exchange = ceilDivideBy(dollars47, exchangeRatio);
divideBy(amount, ratio)
- amount: ****
- ratio: ****
- Dönüş: Miktar
Değişmez bir Miktar döner. ** oran'ın paydasının Marka**'sıdır.
Sonuç değerinin belirlenmesi şu şekildedir:
- amount değerini oran'ın paydasının değeriyle çarpma.
- Adım 1'den elde edilen sonucu oran'ın payının değeriyle bölme.
- Eğer bu bir tam sayı ise, bu değer döner. Aksi halde değer, göre en yakına yuvarlanır.
Örneğin, eğer amount değeri 47 ve oran 3 / 5 ise, hesaplama şöyle olacaktır:
- 47 * 5 = 235
- 235 / 3 = 78.33333...
- BankersRounding(78.3333...) = 78
Hata mesajlarıyla hatalar fırlatır:
- Bir miktar bekleniyor: ${amount}: İlk argüman bir Miktar değil.
- amount'ın markası ${q(amount.brand)} oranının payı ${q(ratio.numerator.brand)} ile eşleşmelidir: Miktar ve oran payının aynı markaya sahip olması gerekir.
const exchangeRatio = makeRatio(3n, swissFrancBrand, 5n, dollarBrand);
const dollars47 = AmountMath.make(dollarBrand, 47n);
// 78 dolarlık bir miktar döner
const exchange = divideBy(dollars47, exchangeRatio);
invertRatio(ratio)
- ratio: ****
- Dönüş: Oran
Girdi oranının payı dönen değerin paydası ve girdi oranının paydası dönen değerin payı olur.
const exchangeRatio = makeRatio(3n, swissFrancBrand, 5n, usDollarBrand);
// 5 ABD Doları / 3 İsviçre Frangı oranı döner
const invertedRatio = invertRatio(exchangeRatio);
addRatios(left, right)
- left: ****
- right: Oran
- Dönüş: Oran
左 ve sağ parametrelerinin toplamının olduğu bir Oran döner.
左 ve sağ parametrelerinin paylarının **'ları birbirine eşit olmalıdır. Aynı şekilde, 左 ve sağ parametrelerinin paydalarının Marka'ları da birbirine eşit olmalıdır. Eğer bu koşullardan biri sağlanmazsa, hiçbir Oran** döner ve hata fırlatılır.
Eğer payda değerleri eşleşmiyorsa, her iki Oran en küçük ortak paydaya çarpılır ve ardından Oranlar toplanır.
Örneğin:
- left = { pay:
44n
kilometre, payda:3n
saat } ve right = { pay:25n
kilometre, payda:2n
saat } varsayalım. - left 2/2 ile çarpılır ve right 3/3 ile çarpılır; sonuçta left = { pay:
88n
kilometre, payda:6n
saat } ve right = { pay:75n
kilometre, payda:6n
saat } olur. - left ve right toplanır ve { pay:
163n
kilometre, payda:6n
saat } olarak döner. Bu Oran döner.
subtractRatios(left, right)
- left: ****
- right: Oran
- Dönüş: Oran
Hakkında parametresinin sol parametresinden çıkarılması ile elde edilen Oran döner.
左 ve sağ parametrelerinin paylarının **'ları birbirine eşit olmalıdır. Aynı şekilde, 左 ve sağ parametrelerinin paydalarının Marka'ları da birbirine eşit olmalıdır. Eğer bu koşullardan biri sağlanmazsa, hiçbir Oran** döner ve hata fırlatılır.
Eğer payda değerleri eşleşmiyorsa, her iki Oran en küçük ortak paydaya çarpılır ve ardından sağ değeri left'den çıkarılır.
Örneğin:
- left = { pay:
44n
kilometre, payda:3n
saat } ve right = { pay:25n
kilometre, payda:2n
saat } varsayalım. - left 2/2 ile çarpılır ve right 3/3 ile çarpılır; sonuçta left = { pay:
88n
kilometre, payda:6n
saat } ve right = { pay:75n
kilometre, payda:6n
saat } olur. - sağ sol'dan çıkarıldığında { pay:
13n
kilometre, payda:6n
saat } olarak döner. Bu Oran döner.
multiplyRatios(left, right)
- left: ****
- right: Oran
- Dönüş: Oran
左 ve sağ parametrelerinin çarpımı olan Oran döner.
左 ve sağ parametrelerinin paylarının **'ları birbirine eşit olmalıdır. Aynı şekilde, 左 ve sağ parametrelerinin paydalarının Marka'ları da birbirine eşit olmalıdır. Eğer bu koşullardan biri sağlanmazsa, hiçbir Oran** döner ve hata fırlatılır.
oneMinus(ratio)
- ratio: ****
- Dönüş: Oran
Oran argümanını 1'den çıkartır ve sonuç olarak elde edilen Oran'ı döner.
Bu işlevin oran argümanının 0 ile 1 arasında olması gerekmektedir. Ayrıca pay ve payda **'larının aynı olması gerekmektedir. Eğer bu koşullardan biri sağlanmazsa, hata fırlatılır ve hiçbir Oran** döner.
ratioGTE(left, right)
- left: ****
- right: Oran
- Dönüş: Boolean
Eğer true dönerse, left right'dan büyüktür veya eşittir, aksi takdirde false döner.
左 ve sağ parametrelerinin ****'larının birbirine eşit olmaması durumunda hata fırlatılır.
ratiosSame(left, right)
- left: ****
- right: Oran
- Dönüş: Boolean
Eğer sağ ve sol Oranlar aynıysa true döner, aksi takdirde false döner. İki Oran'ın aynı sayılması için, bir Oran'ın payı ve paydasının Miktar Değeri ve Marka değerinin, diğer Oran'ın payı ve paydasının Miktar Değeri ve Marka değerleriyle aynı olması gerekir.
quantize(ratio, newDen)
- ratio: ****
- newDen: BigInt
- Dönüş: Oran
YeniDen argümanı ile belirtilen yeni bir paydası olan Oran döner.
parseRatio(numeric, numeratorBrand, denominatorBrand?)
- numeric: ****
- numeratorBrand: ****
- denominatorBrand: Marka - İsteğe bağlı, varsayılan numeratorBrand.
- Dönüş: ****
numeric argümanından bir Oran oluşturur ve bu Oran'ı döner.
assertParsableNumber(specimen)
- specimen: Nesne
- Dönüş: Yok.
_argüman geçersiz **** olmadığı durumlarda hata fırlatır.