Math@1
Der Node Math@1 führt mathematische Operationen auf numerischen Daten innerhalb von JSON-Objekten aus. Er kann Werte addieren, subtrahieren, multiplizieren, dividieren, Modulo-Werte berechnen oder Zahlen auf eine angegebene Anzahl von Dezimalstellen runden – dabei kann er entweder einen konstanten Wert oder einen Wert aus einer anderen Stelle in den Daten verwenden.
Adapter-Voraussetzungen
- Allgemeine Verfügbarkeit: Alle Adapter unterstützen diesen Node-Typ.
Node-Konfiguration
Für die Felder path, targetPath, targetValueWriteMode und targetValueKind siehe Überblick.
transformations:
- type: Math@1
path: $.sensors # Path to the objects containing numeric data
itemPath: $.temperature # Path within each object to the numeric value
itemTargetPath: $.temperatureFahrenheit # Path where the result will be stored
operation: Multiply # Mathematical operation to perform
value: 1.8 # Constant value to use in operation
# OR use valuePath instead of value:
# valuePath: $.conversionFactor # Path to value to use in operation
Parameter
Erforderliche Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
path | string | JSON-Pfad zu den Objekten, die die zu verarbeitenden numerischen Daten enthalten |
itemPath | string | Relativer Pfad innerhalb jedes Objekts zum zu verarbeitenden numerischen Wert |
itemTargetPath | string | Relativer Pfad innerhalb jedes Objekts, unter dem das Ergebnis gespeichert wird |
operation | enum | Die auszuführende mathematische Operation: Add, Subtract, Multiply, Divide, Modulo oder Round |
Optionale Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
value | double | - | Konstanter numerischer Wert, der in der mathematischen Operation verwendet wird |
valuePath | string | - | JSON-Pfad zum Wert, der in der mathematischen Operation verwendet wird |
decimalPlaces | int | 0 | Anzahl der Dezimalstellen, auf die gerundet wird (wird nur bei der Round-Operation verwendet) |
Mathematische Operationen
Der Node unterstützt sechs grundlegende mathematische Operationen:
Add: Addiert den angegebenen Wert zum AusgangswertSubtract: Subtrahiert den angegebenen Wert vom AusgangswertMultiply: Multipliziert den Ausgangswert mit dem angegebenen WertDivide: Dividiert den Ausgangswert durch den angegebenen WertModulo: Gibt den Rest zurück, der nach der Division des Ausgangswerts durch den angegebenen Wert verbleibtRound: Rundet den Ausgangswert auf die angegebene Anzahl von Dezimalstellen (nutzt den ParameterdecimalPlaces)
Wertquellen
Für arithmetische Operationen (Add, Subtract, Multiply, Divide, Modulo) können Sie den zweiten Operanden auf zwei Arten angeben:
- Konstanter Wert: Verwenden Sie den Parameter
value, um einen festen numerischen Wert anzugeben - Dynamischer Wert: Verwenden Sie den Parameter
valuePath, um auf einen Wert an anderer Stelle in den Daten zu verweisen
Es sollte nur einer der beiden Parameter value oder valuePath angegeben werden. Wenn valuePath angegeben ist, hat er Vorrang vor value.
Hinweis: Die Round-Operation verwendet weder den Parameter value noch valuePath. Sie benötigt lediglich den Parameter decimalPlaces, um die Genauigkeit der Rundung zu bestimmen.
Fehlerbehandlung
Der Node wird:
- Eine Warnung ausgeben, wenn unter dem angegebenen
pathkeine Ausgangsdaten gefunden werden - Eine Warnung ausgeben, wenn für ein Objekt unter dem angegebenen
itemPathkein numerischer Wert gefunden wird - Einen Fehler auslösen, wenn der Wert (aus
valueodervaluePath) null oder nicht gesetzt ist - Einen Fehler auslösen, wenn eine nicht unterstützte Operation angegeben wird
Beispiele
Beispiel 1: Temperaturumrechnung (konstanter Wert)
Temperatur von Celsius in Fahrenheit umrechnen:
transformations:
- type: Math@1
path: $.readings
itemPath: $.celsius
itemTargetPath: $.fahrenheit
operation: Multiply
value: 1.8
- type: Math@1
path: $.readings
itemPath: $.fahrenheit
itemTargetPath: $.fahrenheit
operation: Add
value: 32
Eingabe:
{
"readings": [
{ "celsius": 20, "sensor": "A1" },
{ "celsius": 25, "sensor": "A2" }
]
}
Ausgabe nach beiden Transformationen:
{
"readings": [
{ "celsius": 20, "sensor": "A1", "fahrenheit": 68 },
{ "celsius": 25, "sensor": "A2", "fahrenheit": 77 }
]
}
Beispiel 2: Preisberechnung mit Steuer (dynamischer Wert)
Gesamtpreis inklusive Steuer mit einem dynamischen Steuersatz berechnen:
transformations:
- type: Math@1
path: $.orders
itemPath: $.subtotal
itemTargetPath: $.tax
operation: Multiply
valuePath: $.taxRate
- type: Math@1
path: $.orders
itemPath: $.subtotal
itemTargetPath: $.total
operation: Add
valuePath: $.tax
Eingabe:
{
"taxRate": 0.15,
"orders": [
{ "id": "ORD-001", "subtotal": 100 },
{ "id": "ORD-002", "subtotal": 250 }
]
}
Ausgabe nach beiden Transformationen:
{
"taxRate": 0.15,
"orders": [
{ "id": "ORD-001", "subtotal": 100, "tax": 15, "total": 115 },
{ "id": "ORD-002", "subtotal": 250, "tax": 37.5, "total": 287.5 }
]
}
Beispiel 3: Rabatt anwenden
Einen prozentualen Rabatt auf Produktpreise anwenden:
transformations:
- type: Math@1
path: $.products
itemPath: $.originalPrice
itemTargetPath: $.discount
operation: Multiply
value: 0.2 # 20% discount
- type: Math@1
path: $.products
itemPath: $.originalPrice
itemTargetPath: $.salePrice
operation: Subtract
valuePath: $.discount
Eingabe:
{
"products": [
{ "name": "Widget A", "originalPrice": 50 },
{ "name": "Widget B", "originalPrice": 75 }
]
}
Ausgabe:
{
"products": [
{ "name": "Widget A", "originalPrice": 50, "discount": 10, "salePrice": 40 },
{ "name": "Widget B", "originalPrice": 75, "discount": 15, "salePrice": 60 }
]
}
Beispiel 4: Einheitenumrechnung
Maße von Metern in Fuß umrechnen:
transformations:
- type: Math@1
path: $.measurements
itemPath: $.meters
itemTargetPath: $.feet
operation: Multiply
value: 3.28084
Eingabe:
{
"measurements": [
{ "location": "Room A", "meters": 10 },
{ "location": "Room B", "meters": 15.5 }
]
}
Ausgabe:
{
"measurements": [
{ "location": "Room A", "meters": 10, "feet": 32.8084 },
{ "location": "Room B", "meters": 15.5, "feet": 50.85302 }
]
}
Beispiel 5: Modulo-Operation für Reste
Rest für Seitennummerierung oder zyklische Muster berechnen:
transformations:
- type: Math@1
path: $.records
itemPath: $.index
itemTargetPath: $.pageGroup
operation: Modulo
value: 10
Eingabe:
{
"records": [
{ "id": "item-1", "index": 23 },
{ "id": "item-2", "index": 47 },
{ "id": "item-3", "index": 100 },
{ "id": "item-4", "index": 8 }
]
}
Ausgabe:
{
"records": [
{ "id": "item-1", "index": 23, "pageGroup": 3 },
{ "id": "item-2", "index": 47, "pageGroup": 7 },
{ "id": "item-3", "index": 100, "pageGroup": 0 },
{ "id": "item-4", "index": 8, "pageGroup": 8 }
]
}
Beispiel 6: Round-Operation für Dezimalgenauigkeit
Werte auf eine bestimmte Anzahl von Dezimalstellen runden:
transformations:
- type: Math@1
path: $.measurements
itemPath: $.value
itemTargetPath: $.rounded
operation: Round
decimalPlaces: 2
Eingabe:
{
"measurements": [
{ "id": "temp1", "value": 23.456789 },
{ "id": "temp2", "value": 19.1 },
{ "id": "temp3", "value": 25.999 },
{ "id": "temp4", "value": 20.0 }
]
}
Ausgabe:
{
"measurements": [
{ "id": "temp1", "value": 23.456789, "rounded": 23.46 },
{ "id": "temp2", "value": 19.1, "rounded": 19.1 },
{ "id": "temp3", "value": 25.999, "rounded": 26.0 },
{ "id": "temp4", "value": 20.0, "rounded": 20.0 }
]
}
Beispiel 7: Auf Ganzzahl runden (Standard)
Auf die nächste Ganzzahl runden mit dem Standardwert für decimalPlaces (0):
transformations:
- type: Math@1
path: $.scores
itemPath: $.percentage
itemTargetPath: $.roundedScore
operation: Round
Eingabe:
{
"scores": [
{ "student": "Alice", "percentage": 87.6 },
{ "student": "Bob", "percentage": 92.4 },
{ "student": "Charlie", "percentage": 89.5 }
]
}
Ausgabe:
{
"scores": [
{ "student": "Alice", "percentage": 87.6, "roundedScore": 88 },
{ "student": "Bob", "percentage": 92.4, "roundedScore": 92 },
{ "student": "Charlie", "percentage": 89.5, "roundedScore": 90 }
]
}
Anwendungsfälle
- Einheitenumrechnung: Zwischen verschiedenen Maßeinheiten umrechnen
- Preisberechnung: Steuern, Rabatte oder Aufschläge auf Preise anwenden
- Datennormalisierung: Numerische Werte für die Analyse skalieren oder anpassen
- Anwendung von Formeln: Mathematische Formeln zur Transformation von Daten anwenden
- Prozentberechnungen: Prozentwerte, Verhältnisse oder Anteile berechnen
- Finanzberechnungen: Zinsen, Gebühren oder andere finanzielle Kennzahlen berechnen
- Restberechnungen: Modulo für Seitennummerierung, zyklische Muster oder Hash-Buckets verwenden
- Datenpartitionierung: Daten mithilfe von Modulo-Operationen auf Buckets verteilen
- Terminplanung: Wiederkehrende Intervalle oder Zykluspositionen berechnen
- Genauigkeitssteuerung: Werte für die Anzeige oder Speicherung auf bestimmte Dezimalstellen runden
- Datenbereinigung: Numerische Genauigkeit über Datensätze hinweg standardisieren
Hinweise
- Nur numerische Werte: Der Node arbeitet ausschließlich mit numerischen Werten. Nicht-numerische Werte führen zu Warnungen und werden übersprungen
- Genauigkeit: Die Ergebnisse behalten die Genauigkeit der Eingabewerte und Operationen bei
- Array-Verarbeitung: Der Node verarbeitet alle unter dem angegebenen
pathgefundenen Objekte - Pfadvalidierung: Sowohl
itemPathals auch die Zielpfade sind relativ zu jedem unterpathgefundenen Objekt - Division durch Null: Eine Division durch Null führt je nach Eingabe zu Infinity- oder NaN-Werten
- Modulo durch Null: Modulo durch Null löst eine DivideByZeroException aus
- Wertanforderungen: Für arithmetische Operationen muss entweder
valueodervaluePathangegeben werden, aber nicht beide - Round-Operation: Die
Round-Operation verwendet kaufmännisches Runden (MidpointRounding.ToEven) und benötigt nurdecimalPlaces - Dezimalstellen: Der Standardwert ist 0 (auf Ganzzahl runden), negative Werte werden nicht unterstützt
Verwandte Nodes
- FormatString@1: Numerische Ergebnisse mit benutzerdefinierter Formatierung in Zeichenketten formatieren
- ConvertDataType@1: Zwischen verschiedenen Datentypen umwandeln, einschließlich numerischer Umwandlungen