MetalAPI
XAU3.997,89−1,54 %XAG53,936−1,51 %XPT1.554,47−0,83 %XPD1.047,03−0,44 %XCU6,5080+2,29 %WTI103,27+3,82 %BRENT111,70−1,30 %EUR1,120400−0,01 %GBP1,337500−0,01 %JPY0,0063761+0,14 %CHF1,213445−0,25 %TRY0,020125−0,12 %BTC80.329,75−0,55 %ETH2.329,36−1,13 %
Alle Artikel
GoldSilberEinheiten

Feinunze, Gramm und Kilogramm: Edelmetallpreise richtig umrechnen

Feinunze vs. Avoirdupois-Unze, exakte Gramm- und Kilogrammfaktoren, API-Parameter unit, Rundungsregeln und Fehler, die Metallpreise um fast 10 % verfälschen.

Von MetalAPI Team··9 Min. Lesezeit

Warum die Einheit wichtig ist

Edelmetalle werden fast überall pro Feinunze notiert: im Großhandel, in den Preislisten von Edelmetallhändlern und in Preis-APIs. Die Menschen, die Metall kaufen und verkaufen, denken dagegen in Gramm, Kilogramm, Tolas oder Taels, je nachdem, wo sie leben und womit sie handeln. Jedes Produkt, das Menschen einen Metallpreis anzeigt, enthält daher mindestens eine Einheitenumrechnung, und diese Umrechnung ist eine häufige Quelle unauffälliger, plausibel wirkender Fehler.

Der klassische Fehler besteht darin, eine Feinunze wie eine gewöhnliche Unze zu behandeln. Die beiden unterscheiden sich um fast 10 %: genug, um auf jeder Rechnung ins Gewicht zu fallen, aber wenig genug, dass es in einer Demo niemandem auffällt. Dieser Artikel behandelt die exakten Definitionen, die Umrechnungsfaktoren, die Umrechnung durch die API, das Runden und Anzeigen der Ergebnisse sowie eine Liste von Fehlern, für die sich Tests lohnen.

Feinunze vs. Avoirdupois-Unze

Beide Unzen sind in Grain definiert, und das Grain hat eine exakte metrische Definition: 1 Grain = 64,79891 Milligramm. Alles andere folgt daraus:

  • Eine Feinunze (Troy-Unze) hat 480 Grain, exakt 31,1034768 Gramm. In dieser Einheit werden Gold, Silber, Platin und Palladium bepreist.
  • Eine Avoirdupois-Unze, die Alltagsunze für Lebensmittel und Pakete in den USA und Großbritannien, hat 437,5 Grain, exakt 28,349523125 Gramm.
  • Ein Troy-Pfund hat 12 Feinunzen (373,2417216 g), das Avoirdupois-Pfund dagegen 16 Avoirdupois-Unzen (453,59237 g). Die Feinunze ist also die schwerere Unze, das Troy-Pfund aber das leichtere Pfund.
EinheitGrainGramm (exakt)Feinunzen
Grain10,064798910,0020833…
Pennyweight (dwt)241,555173840,05
Avoirdupois-Unze437,528,3495231250,9114583…
Feinunze48031,10347681
Troy-Pfund5.760373,241721612
Avoirdupois-Pfund7.000453,5923714,5833…

Eine Feinunze ist etwa 9,7 % schwerer als eine Avoirdupois-Unze (480 ÷ 437,5 ≈ 1,0971). Genau so groß ist der Fehler, wenn man die beiden verwechselt.

Sofern eine Quelle nichts anderes angibt, ist die Unze in einem Edelmetallpreis eine Feinunze, oft als oz t oder ozt geschrieben. In MetalAPI ist die Standardeinheit troy_oz, und jeder Metallpreis gilt pro Feinunze, sofern Sie nichts anderes anfordern.

Exakte Umrechnungsfaktoren

Da all diese Einheiten exakt definiert sind, brauchen Umrechnungen keine Näherungen. Um einen Preis pro Feinunze in einen Preis pro anderer Einheit umzurechnen, multiplizieren Sie mit der Anzahl Feinunzen in dieser Einheit:

Preis pro Einheit = Preis pro Feinunze × Gramm pro Einheit ÷ 31,1034768

Preis proGramm pro EinheitFeinunzenpreis multiplizieren mit
Gramm10,0321507466
Kilogramm1.00032,1507466
Avoirdupois-Unze28,3495231250,9114583333
Avoirdupois-Pfund453,5923714,5833333
Metrische Tonne1.000.00032.150,7466
Short Ton (2.000 lb)907.184,7429.166,6667
Tola11,66380380,375
Pennyweight1,555173840,05

Die Tola, in Südasien und den Golfstaaten für Gold noch weit verbreitet, ist als 180 Grain definiert: exakt 11,6638038 g oder drei Achtel einer Feinunze. Der Tael ist weniger eindeutig, weil sein Gewicht vom Markt abhängt: etwa 37,4 g im Goldhandel in Hongkong, 37,5 g in Taiwan und 50 g in Festlandchina. Wenn Sie Taels unterstützen, legen Sie das Gewicht in Gramm als Konfigurationswert fest und geben Sie an, welchen Tael Sie meinen.

Kilobarren eignen sich gut für eine Plausibilitätsprüfung. Ein Kilogramm entspricht etwa 32,15 Feinunzen, ein Kilopreis sollte also immer ungefähr das 32-Fache des Unzenpreises betragen. Liegt er eher beim 35-Fachen, hat jemand den Avoirdupois-Faktor verwendet.

Manuell umrechnen

Wenn Sie bereits einen Preis pro Feinunze haben, ist die Umrechnung eine einzige Multiplikation. Halten Sie die exakten Konstanten in einem Modul und rechnen Sie über Gramm um, damit jedes Einheitenpaar auf dieselbe Weise funktioniert:

units.mjs
// Gramm pro Einheit. Alle exakt: 1 Grain = 64.79891 mg.
const GRAMS_PER_UNIT = {
  troy_oz: 31.1034768, // 480 Grain
  gram: 1,
  kilogram: 1000,
  ounce: 28.349523125, // Avoirdupois, 437,5 Grain
  pound: 453.59237, // Avoirdupois, 7.000 Grain
  metric_ton: 1_000_000,
  short_ton: 907_184.74, // 2,000 lb
  tola: 11.6638038, // 180 Grain
  pennyweight: 1.55517384, // 24 Grain
};

/** Rechnet einen Preis pro Einheit `from` in einen Preis pro Einheit `to` um. */
export function convertPrice(price, from, to) {
  const a = GRAMS_PER_UNIT[from];
  const b = GRAMS_PER_UNIT[to];
  if (a === undefined || b === undefined) throw new Error(`Unknown unit: ${a === undefined ? from : to}`);
  return (price / a) * b;
}

console.log(convertPrice(3997.89, "troy_oz", "gram")); // 128.535148…
console.log(convertPrice(3997.89, "troy_oz", "kilogram")); // 128535.148…
console.log(convertPrice(3997.89, "troy_oz", "tola")); // 1499.20875

Verwenden Sie in Python Decimal, wenn das Ergebnis auf einer Rechnung oder in einem Hauptbuch landet. requests reicht parse_float an den JSON-Parser weiter, sodass Preise nie den Umweg über eine binäre Gleitkommazahl nehmen:

per_gram.py
import os
from decimal import Decimal, ROUND_HALF_UP

import requests

GRAMS_PER_TROY_OZ = Decimal("31.1034768")
CENT = Decimal("0.01")

r = requests.get(
    "https://metalapi.com/api/v1/latest",
    params={"currencies": "XAU"},
    headers={"X-API-Key": os.environ["METALAPI_KEY"]},
    timeout=10,
)
data = r.json(parse_float=Decimal)
if not data["success"]:
    raise RuntimeError(data["error"])

per_oz = data["rates"]["USDXAU"]  # z. B. Decimal("3997.89")
per_gram = per_oz / GRAMS_PER_TROY_OZ
per_kg = per_gram * 1000

print(per_gram.quantize(CENT, rounding=ROUND_HALF_UP))  # 128.54 beim Beispielpreis
print(per_kg.quantize(CENT, rounding=ROUND_HALF_UP))  # 128535.15

Kehrwertkurse erfordern die umgekehrte Operation. rates.XAU gibt Feinunzen pro Einheit der Basiswährung an, Gramm pro Währungseinheit sind also rates.XAU × 31,1034768, nicht ÷. Diese Falle ist ein weiterer Grund, mit den Preisschlüsseln mit Präfix wie USDXAU zu arbeiten und die Kehrwert-Schlüssel beiseitezulassen.

Die API umrechnen lassen: der Parameter unit

Sie können MetalAPI auch direkt nach der gewünschten Einheit fragen. /latest, die historischen Endpunkte, /timeframe, /ohlc, /convert und /carat akzeptieren den Parameter unit: troy_oz (Standard), gram, kilogram, ounce, pound, metric_ton oder short_ton. Diese Anfrage liefert Gold und Silber in Euro pro Gramm:

bash
curl "https://metalapi.com/api/v1/latest?base=EUR&currencies=XAU,XAG&unit=gram" \
  -H "X-API-Key: $METALAPI_KEY"

Ist die Einheit nicht die Standardeinheit, wiederholt die Antwort sie in einem Feld unit auf oberster Ebene. Die folgenden Werte sind ein Beispiel aus der Dokumentation, keine Live-Preise:

Beispielantwort
{
  "success": true,
  "timestamp": 1792765800,
  "date": "2026-10-23",
  "base": "EUR",
  "unit": "gram",
  "rates": {
    "XAU": 0.009057444725,
    "EURXAU": 110.4064149,
    "XAG": 0.6713138244,
    "EURXAG": 1.489616277
  }
}

Die API verwendet dieselben exakten Faktoren wie die Tabellen oben, und auch der Kehrwert-Schlüssel folgt der Einheit: Mit unit=gram ist rates.XAU die Anzahl Gramm Gold pro Euro. Einige Regeln, die Sie kennen sollten:

  • Kurzformen wie g, kg, lb und tonne werden akzeptiert. oz bedeutet die Avoirdupois-Unze; verwenden Sie es also nie als Kurzform für Feinunzen.
  • Eine unbekannte Einheit liefert Fehler 209 (invalid_unit).
  • unit gilt nur für Edel- und Industriemetalle. Energie bleibt pro Barrel, MMBtu oder Gallone, Währungen und Krypto sind nicht betroffen. Symbole in einer Anfrage zu mischen, ist daher unbedenklich.
  • Auch Industriemetalle werden standardmäßig pro Feinunze notiert, sodass sich alle Metalle direkt vergleichen lassen. Übergeben Sie unit=pound für Kupfer, unit=metric_ton für Aluminium und Zink und unit=short_ton für Stahl, um die an diesen Märkten üblichen Einheiten zu erhalten.

Auch /convert akzeptiert unit und macht so in einem Schritt aus einem Gewicht einen Geldbetrag. Diese Anfrage bewertet 250 Gramm Gold in US-Dollar:

Wert von 250 g Gold
curl "https://metalapi.com/api/v1/convert?from=XAU&to=USD&amount=250&unit=gram" \
  -H "X-API-Key: $METALAPI_KEY"

info.rate ist der Preis eines Gramms in US-Dollar und result der Wert der gesamten Menge. Mit dem Beispiel-Goldpreis sieht die Antwort so aus:

Beispielantwort
{
  "success": true,
  "query": { "from": "XAU", "to": "USD", "amount": 250, "unit": "gram" },
  "info": { "timestamp": 1792834892, "rate": 128.5351482, "quote": 128.5351482 },
  "date": "2026-10-24",
  "result": 32133.78705
}

Runden und Anzeigen

Kurse kommen als JSON-Zahlen mit bis zu 10 signifikanten Stellen an. Diese Genauigkeit sorgt dafür, dass abgeleitete Werte exakt bleiben. Behalten Sie sie also bis zum letztmöglichen Moment bei:

  • Erst umrechnen, zuletzt runden. Wer den Grammpreis auf Cent rundet und dann für einen Kilobarren mit 1.000 multipliziert, macht aus einem Rundungsfehler von einem halben Cent einen Fehler von bis zu fünf Währungseinheiten.
  • Pro Währung runden. Die meisten Währungen haben zwei Nachkommastellen, der japanische Yen keine und der kuwaitische Dinar drei. Lassen Sie Intl.NumberFormat oder Ihre Locale-Bibliothek die Standardwerte wählen, statt zwei Stellen fest einzutragen.
  • Bei kleinen Preisen mehr Stellen zulassen. Beim Beispielpreis von 53,94 USD pro Feinunze kostet Silber etwa 1,73 USD pro Gramm, und zwei Nachkommastellen verbergen den Großteil seiner täglichen Bewegung.
  • Dezimaltypen für Geld verwenden. Decimal in Python, BigDecimal in Java oder ganzzahlige kleinste Währungseinheiten in Ihrer Datenbank für alles, was in Rechnung gestellt oder verbucht wird. Für Charts sind binäre Gleitkommazahlen in Ordnung.
  • Die Einheit angeben. Schreiben Sie „pro Feinunze“, „pro Gramm“ oder „pro kg“ neben jeden Preis. Ein bloßes „pro Unze“ ist für viele Leser mehrdeutig.

Eine kleine Hilfsfunktion, die die Standardanzahl an Nachkommastellen der Währung aus Intl übernimmt und optional einige hinzufügt:

format.mjs
function formatPrice(value, currency, locale = "en-US", extraDigits = 0) {
  const { maximumFractionDigits } = new Intl.NumberFormat(locale, { style: "currency", currency }).resolvedOptions();
  const digits = maximumFractionDigits + extraDigits;
  return new Intl.NumberFormat(locale, {
    style: "currency",
    currency,
    minimumFractionDigits: digits,
    maximumFractionDigits: digits,
  }).format(value);
}

formatPrice(128.53514819925212, "USD"); // "$128.54"   Gold pro Gramm
formatPrice(1.7342112699117933, "USD", "en-US", 2); // "$1.7342"   Silber pro Gramm
formatPrice(110.4064149, "EUR", "de-DE"); // "110,41 €"

Umrechnungstabelle auf einen Blick

Die Tabelle rechnet die Beispielpreise aus der MetalAPI-Dokumentation um: 3.997,89 USD pro Feinunze für Gold und 53,94 USD pro Feinunze für Silber. Sie veranschaulichen die Rechnung und sind keine aktuellen Marktpreise:

Preis proGold (USD)Silber (USD)
Feinunze3.997,8953,94
Gramm128,541,7342
Kilogramm128.535,151.734,21
Tola (11,6638 g)1.499,2120,23
Pennyweight (1,5552 g)199,892,697
Troy-Pfund (12 oz t)47.974,68647,28
Avoirdupois-Unze3.643,9149,16

Sehen Sie sich die letzte Zeile an. Wenn eine Seite den Avoirdupois-Wert als Unzenpreis ausweist, gibt sie den Barrenpreis um fast 9 % zu niedrig an. Der umgekehrte Fehler, einen Feinunzenpreis durch 28,35 zu teilen, um einen Grammpreis zu erhalten, überzeichnet ihn um etwa 9,7 %: 141,02 statt 128,54 pro Gramm Gold.

Typische Umrechnungsfehler und wie Sie sie testen

Die meisten Einheitenfehler folgen einer Handvoll Muster:

  • Division durch 28,35. Der Avoirdupois-Faktor wird für einen Feinunzenpreis verwendet. Richtig ist 31,1034768.
  • `oz` als Feinunze behandeln. In MetalAPI ist oz wie in den meisten Einheiten-Bibliotheken die Avoirdupois-Unze. Barrenpreise brauchen troy_oz oder gar kein unit.
  • Den Kehrwert-Schlüssel umrechnen. rates.XAU gibt Unzen pro Währungseinheit an, keinen Preis. Ihn in Gramm umzurechnen bedeutet, mit 31,1034768 zu multiplizieren, was für jeden falsch aussieht, der das Dividieren gewohnt ist.
  • Doppelt umrechnen. Wer unit=gram anfragt und dann noch einmal durch 31,1034768 teilt, erhält einen etwa 31-mal zu kleinen Preis. Entscheiden Sie, ob die Umrechnung in der API oder in Ihrem Code stattfindet, aber nie in beiden.
  • Zu früh runden. Runden Sie einmal, bei der Anzeige.
  • Über Einheiten hinweg cachen. Ignoriert Ihr Cache-Schlüssel den Query-String, kann eine Antwort in Gramm dort ausgeliefert werden, wo ein Unzenpreis erwartet wurde. Nehmen Sie unit und base in den Schlüssel auf.
  • Gewichtseinheiten auf Energie anwenden. unit hat keine Wirkung auf Öl oder Gas, und einen Barrelpreis durch 31,1 zu teilen, ergibt keinen Sinn. Sichern Sie Umrechnungen anhand der Kategorie ab, die /symbols?details=1 für jedes Symbol liefert.

Einige Eigenschaftstests fangen die meisten dieser Fehler ab, bevor sie ausgeliefert werden. Sie nutzen den integrierten Test-Runner von Node und die Funktion convertPrice von oben; führen Sie sie mit node --test aus:

units.test.mjs
import { test } from "node:test";
import assert from "node:assert/strict";
import { convertPrice } from "./units.mjs";

const PER_OZ = 3997.89; // Beispielpreis, USD pro Feinunze

test("a kilogram price is 1,000 gram prices", () => {
  const g = convertPrice(PER_OZ, "troy_oz", "gram");
  const kg = convertPrice(PER_OZ, "troy_oz", "kilogram");
  assert.ok(Math.abs(kg - g * 1000) < 1e-6);
});

test("converting there and back returns the original price", () => {
  const g = convertPrice(PER_OZ, "troy_oz", "gram");
  assert.ok(Math.abs(convertPrice(g, "gram", "troy_oz") - PER_OZ) < 1e-9);
});

test("an avoirdupois ounce costs less than a troy ounce", () => {
  assert.ok(convertPrice(PER_OZ, "troy_oz", "ounce") < PER_OZ);
});

test("a kilogram holds about 32.15 troy ounces", () => {
  const kg = convertPrice(PER_OZ, "troy_oz", "kilogram");
  assert.ok(Math.abs(kg / PER_OZ - 32.1507466) < 1e-6);
});

Wenn Sie Schmuck bepreisen, ist der nächste Schritt der Feingehalt: Goldpreise nach Karat erklärt baut auf diesen Umrechnungen Preise für 22 und 18 Karat auf. Die Anleitung zu Datenformaten und der Abschnitt zu Einheiten in der API-Dokumentation dokumentieren alle Einheitenwerte, und die Symbolseite zeigt, in welcher Einheit jeder Markt gehandelt wird.

Probieren Sie es mit Ihren eigenen Daten aus

Erstellen Sie ein kostenloses Konto und senden Sie Ihre erste Anfrage in unter zwei Minuten. 100 Anfragen pro Monat, keine Kreditkarte.

Weiterlesen