Operacje matematyczne w ScriptCode
Operacje matematyczne w ScriptCode
Zalecane jest, aby wszystkie operacje matematyczne w scriptCode wykonywać poprzez obiekt BigDecimal.
Interfejs API
big-decimal.interface.ts
big-decimal.interface.tsBigDecimal
interface BigDecimal {
valueOf(value: string | number | BigDecimal): BigDecimal
add(augend: string | number | BigDecimal): BigDecimal
subtract(subtrahend: string | number | BigDecimal): BigDecimal
multiply(multiplicand: string | number | BigDecimal): BigDecimal
divide(divisor: string | number | BigDecimal): BigDecimal
divide(divisor: string | number | BigDecimal, roundingMode: string): BigDecimal
divide(divisor: string | number | BigDecimal, scale: number): BigDecimal
divide(divisor: string | number | BigDecimal, scale: number, roundingMode: string): BigDecimal
setScale(newScale: number): BigDecimal
setScale(newScale: number, roudingMode: string): BigDecimal
equals(equated: string | number | BigDecimal): boolean
compareTo(compared: string | number | BigDecimal): int
}decimal-format.interface.ts
decimal-format.interface.tsinterface DecimalFormat {
of(pattern: string): DecimalFormat
of(pattern: string, symbols: DecimalFormatSymbols): DecimalFormat
format(value: BigDecimal): string
parse(value: string): BigDecimal
}rounding-mode.interface.ts
rounding-mode.interface.tsenum RoundingMode {
UP,
DOWN,
CEILING,
FLOOR,
HALF_UP,
HALF_DOWN,
HALF_EVEN
}decimal-format-symbols.interface.ts
decimal-format-symbols.interface.tsenum DecimalFormatSymbols {
PL,
EN,
ES,
SK,
CZ
}random.interface.ts
random.interface.tsinterface Random {
uuid(): string
}BigDecimal
Tworzenie obiektu
var value = BigDecimal.valueOf("10.1000"); // ZalecaneObiekt BigDecimal jest niezmienny (immutable).
Operacje takie jak add() nie zmieniają wartości, wymagają przypisania wyniku do zmiennej.
Operacje matematyczne
Dodawanie
let value = BigDecimal.valueOf("1");
value = value.add("5"); // 1 + 5 = 6Odejmowanie
let value = BigDecimal.valueOf("100");
value = value.subtract("5"); // 100 - 5 = 95Dzielenie
let value = BigDecimal.valueOf("100");
value = value.divide("10"); // 100 / 10 = 10
value = value.divide("3", 5, RoundingMode.UP); // 10 / 3 = 3.33334Mnożenie
let value = BigDecimal.valueOf("1");
value = value.multiply("20"); // 1 * 20 = 20Ustawienie skali
value = BigDecimal.valueOf("10.1000");
value = value.setScale(2); // = 10.10
value = value.setScale(1, RoundingMode.HALF_UP); // = 10.1Porównanie i równość
value.equals("10"); // false
value.compareTo("5"); // 1DecimalFormat
Klasa do formatowania liczb dziesiętnych w różnych językach. Dokumentacja: DecimalFormat (Java)
Przykład
let decimalFormatPL = DecimalFormat.of("#.#", DecimalFormatSymbols.PL);
decimalFormatPL.format(BigDecimal.valueOf("34.567")); // 34,6Patterns
0
Zastępca dla cyfry
#
Zastępca dla cyfry (0 pomijane)
,
Separator dziesiętny
%
Mnoży przez 100 i wyświetla jako procent
E
Notacja naukowa
Zaokrąglanie liczb (RoundingMode)
RoundingMode)HALF_UP
Zaokrągla w górę, jeśli część dziesiętna ≥ 0.5
CEILING
Zawsze w górę do najbliższej liczby całkowitej
DOWN
Zawsze w dół
FLOOR
W dół do najbliższej liczby całkowitej
HALF_DOWN
W dół jeśli < 0.5
HALF_EVEN
Zaokrąglenie "bankierskie" (do liczby parzystej)
Preferowane skale wyników
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigDecimal.html
Add
max(addend.scale(), augend.scale())
Subtract
max(minuend.scale(), subtrahend.scale())
Multiply
multiplier.scale() + multiplicand.scale()
Divide
dividend.scale() - divisor.scale()
Square root
radicand.scale()/2
Random
Generowanie identyfikatorów UUID (wersja 4):
function callService(context) {
return [{ 'output': Random.uuid() }];
}Last updated
Was this helpful?
