K 金价格详解:24K、22K、18K 及其计算方法
24K、22K 和 18K 分别代表什么,916、750 等成色印记如何与 K 数对应,怎样计算每克 K 金价格,以及如何通过金价 API 直接获取各 K 数的金价。
K 数、克拉与纯度
K 数衡量的是黄金的纯度,而不是重量。纯金为 24K,因此合金的含金量等于其 K 数除以 24。18K 金由 18 份黄金和 6 份其他金属组成,例如银、铜、锌或钯,这些金属能使合金更坚硬、改变其颜色并降低成本。
Karat(K 或 kt)和 carat(ct)很容易混淆。在美式英语中,karat 表示纯度,carat 则是用于称量宝石的 200 毫克单位(克拉)。英式英语则常用 carat 同时表示这两种含义。MetalAPI 的端点名为 /carat,沿用的是更宽泛的用法,但它返回的是按纯度划分的金价,而不是按宝石重量。
将 K 金价格与黄金市场联系起来的公式很简单:
K 数为 K 的黄金每克价格 = 每金衡盎司现货价格 ÷ 31.1034768 × K ÷ 24
本文将逐一解释这个公式的各个部分,演示如何自行计算以及如何通过 API 获取,然后再看看 K 金价格与成品首饰价格之间还差了哪些因素。
K 数纯度与千分比成色
许多国家使用千分比成色(每一千份中黄金所占的份数)来标记黄金,以代替 K 数或与 K 数并列标注。两种标度可以直接相互对应:
| K 数 | 纯度(K ÷ 24) | 含金量 | 成色(千分比) |
|---|---|---|---|
| 24K | 1.0000 | 100% | 1000(金条为 999 或 999.9) |
| 23K | 0.9583 | 95.8% | 958.3 |
| 22K | 0.9167 | 91.7% | 916.7(印记为 916) |
| 21K | 0.8750 | 87.5% | 875 |
| 20K | 0.8333 | 83.3% | 833.3 |
| 18K | 0.7500 | 75.0% | 750 |
| 16K | 0.6667 | 66.7% | 666.7 |
| 14K | 0.5833 | 58.3% | 583.3(印记为 585) |
| 12K | 0.5000 | 50.0% | 500 |
| 10K | 0.4167 | 41.7% | 416.7(印记为 417) |
| 9K | 0.3750 | 37.5% | 375 |
| 8K | 0.3333 | 33.3% | 333.3(印记为 333) |
将这张表转换为价格时,有两个细节需要注意:
- 印记代表的是最低标准。 585 印记表示含金量至少为 58.5%,略高于 14 ÷ 24 = 58.33%。各国有各自的标准和公差,因此一件饰品的实际成色可能略高于 K 数对应的比例。
- 纯金并不完全等于 1.0000。 投资金条的成色通常为 999.9 或 999。MetalAPI 中的 24K 价格采用的纯度恰好为 1,因此与现货价格相等。
哪些 K 数最重要,取决于您在哪里销售。22K 和 21K 是南亚和中东大部分地区的传统首饰成色,18K 和 14K 在欧洲和北美很普遍,9K 则在英国较为常见。请支持您的客户实际购买的成色。
自行计算 K 金价格
现货黄金按每金衡盎司纯金报价。要得到每克 K 金价格,先换算单位,再按纯度折算。以 MetalAPI 文档中的示例现货价格每金衡盎司 3,997.89 美元为例(仅作示意,并非实时价格):
- 每克纯金价格:3,997.89 ÷ 31.1034768 = 128.5351 美元。
- 每克 22K 金价格:128.5351 × 22 ÷ 24 = 117.8239 美元。
- 每克 18K 金价格:128.5351 × 18 ÷ 24 = 96.4014 美元。
下面用 JavaScript 实现同样的计算,另附一个按成色(而非 K 数)计价的函数:
const GRAMS_PER_TROY_OZ = 31.1034768;
/** 指定 K 数黄金的每克价格(24 = 纯金)。 */
export function karatPricePerGram(spotPerTroyOz, karat) {
return (spotPerTroyOz / GRAMS_PER_TROY_OZ) * (karat / 24);
}
/** 指定千分比成色(如 585 或 916)黄金的每克价格。 */
export function finenessPricePerGram(spotPerTroyOz, fineness) {
return (spotPerTroyOz / GRAMS_PER_TROY_OZ) * (fineness / 1000);
}
const spot = 3997.89; // 示例价格,美元/金衡盎司
for (const k of [24, 22, 21, 18, 14, 10, 9]) {
console.log(`${k}K`, karatPricePerGram(spot, k).toFixed(4));
}
// 24K 128.5351, 22K 117.8239, 21K 112.4683, 18K 96.4014, 14K 74.9788, 10K 53.5563, 9K 48.2007
console.log("585", finenessPricePerGram(spot, 585).toFixed(4)); // 75.1931请从已经以您的销售货币计价的现货价格出发(base=EUR、base=INR 等),这样金价和汇率就来自同一时刻。如果用另一时间获取的汇率去换算以美元计的每克价格,就会引入与黄金本身无关的误差。
如果您按印记而不是按 K 数定价,请使用按成色计算的函数。583.3 与 585 之间的差异约为金属价值的 0.3%:每克相差不大,但在一条较重的金链上就很明显了。无论选择哪种方式,都要始终如一地使用,并记录在文档中。
通过 /carat 端点获取 K 金价格
MetalAPI 的 /carat 端点会替您完成这些计算,所有付费套餐(从 Lite 起)均可使用。它接受以下参数:
carat:24(默认)、23、22、21、20、18、16、14、12、10、9、8或all。base:价格的计价货币,默认为USD。unit:默认为troy_oz;首饰场景通常选择gram。date:可选,格式为YYYY-MM-DD,用于查询过去某一天的 K 金价格。
curl "https://metalapi.com/api/v1/carat?carat=22&unit=gram&base=EUR" \
-H "X-API-Key: $METALAPI_KEY"以下是使用 API 参考文档中示例值的响应:
{
"success": true,
"carat": "22",
"date": "2026-10-24",
"base": "EUR",
"timestamp": 1792834892,
"rates": {
"XAU22K": { "price": 105.5297, "unit": "gram", "carat": "22", "purity": 0.916667 }
}
}使用 carat=all 可以在一次请求中获取所有 K 数的价格,费用与查询单个 K 数相同。每个条目以 XAU<karat>K 为键,包含价格、单位、K 数以及所采用的纯度。以下示例为节选:
{
"success": true,
"carat": "all",
"date": "2026-10-23",
"base": "USD",
"timestamp": 1792765800,
"rates": {
"XAU24K": { "price": 128.53515, "unit": "gram", "carat": "24", "purity": 1 },
"XAU22K": { "price": 117.82389, "unit": "gram", "carat": "22", "purity": 0.916667 },
"XAU18K": { "price": 96.401361, "unit": "gram", "carat": "18", "purity": 0.75 },
"XAU14K": { "price": 74.978836, "unit": "gram", "carat": "14", "purity": 0.583333 }
}
}在 Node.js 18 或更高版本中,读取以阿联酋迪拉姆计、每克的所有 K 数金价:
const params = new URLSearchParams({ carat: "all", unit: "gram", base: "AED" });
const res = await fetch(`https://metalapi.com/api/v1/carat?${params}`, {
headers: { "X-API-Key": process.env.METALAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.error.code} ${data.error.type}: ${data.error.info}`);
for (const row of Object.values(data.rates)) {
console.log(`${row.carat}K: ${row.price.toFixed(2)} ${data.base} per ${row.unit}`);
}在 Free 套餐中,/carat 会返回错误 106(plan_restriction),并附带 upgrade_url。不支持的 K 数会返回 210(invalid_carat)。使用 Free 套餐时,您仍可将上述公式应用于 /latest 返回的金价,数据按 Free 套餐的每日间隔更新。
以本地货币定价
首饰以本地货币买卖,因此请将 base 设为店铺使用的货币:卢比用 INR,迪拉姆用 AED,里拉用 TRY,英镑用 GBP。支持的 57 种货币均可使用,而且由于金价和汇率来自同一个快照,各个数字彼此一致。
# 所有 K 数的金价,以印度卢比计、按克计价
curl "https://metalapi.com/api/v1/carat?carat=all&unit=gram&base=INR" \
-H "X-API-Key: $METALAPI_KEY"
# 过去某一天的 22K 金价,以土耳其里拉计、按克计价
curl "https://metalapi.com/api/v1/carat?carat=22&unit=gram&base=TRY&date=2026-10-01" \
-H "X-API-Key: $METALAPI_KEY"对于以托拉(tola)报价的市场,将每克价格乘以 11.6638038,或将每金衡盎司价格乘以 0.375 即可。一根 10 托拉的金条重 116.638 克。单位换算一文给出了托拉、两(tael)和英钱(pennyweight)的精确换算系数。
三个实用要点:
- 时效性取决于您的套餐。
/carat返回的价格时效与您的套餐一致:Lite 每 30 分钟,Standard 每 10 分钟,最快可达 Enterprise 的每 5 秒。每天只更新几次价格牌的店铺并不需要最快的套餐。 - 显示时间戳。
timestamp字段可以告诉客户和审计人员价格是何时获取的。 - 周末。 现货黄金在纽约时间周五 17:00 停止交易,周日 17:00 重新开盘,因此周末期间 K 金价格保持在周五的最后价格。
从 K 金价格到首饰价格
K 金价格是黄金含量的价值。成品首饰的价格还要加上若干组成部分,其计算方式因国家、行业惯例和商家而异。常见的组成部分包括:
- 金属价值: 黄金净重 × 每克 K 金价格。宝石、珍珠及其他非黄金部分单独称重,不计入其中。
- 加工费: 人工和设计费用,可按克收取、按金属价值的百分比收取,或按件收取固定金额。有些市场还会加收损耗费,以弥补制作过程中损失的金属。
- 宝石及其他材料: 按各自的规则定价。
- 印记或鉴定费用(如适用)。
- 税费: 增值税、GST 或销售税。税率和规则因国家而异,有些国家对投资金和首饰的处理方式不同。例如在欧盟,投资金适用特殊的增值税豁免,但首饰不在豁免范围之内。
下面是一个将这些部分分开计算的最简报价计算器。它全程使用 Decimal,确保发票上的金额分毫不差:
from dataclasses import dataclass
from decimal import Decimal, ROUND_HALF_UP
CENT = Decimal("0.01")
@dataclass
class QuoteInput:
weight_g: Decimal # 黄金净重,不含宝石
karat_price_per_g: Decimal # 来自 /carat?unit=gram,以您的货币计
making_per_g: Decimal = Decimal("0") # 每克固定加工费
making_pct: Decimal = Decimal("0") # 或按金属价值的比例收取
stones: Decimal = Decimal("0") # 单独定价
tax_rate: Decimal = Decimal("0") # 您所在地区适用的增值税、GST 或销售税
def jewelry_quote(q: QuoteInput) -> dict:
metal = q.weight_g * q.karat_price_per_g
making = q.weight_g * q.making_per_g + metal * q.making_pct
subtotal = metal + making + q.stones
tax = subtotal * q.tax_rate
parts = {"metal": metal, "making": making, "stones": q.stones, "tax": tax, "total": subtotal + tax}
return {k: v.quantize(CENT, rounding=ROUND_HALF_UP) for k, v in parts.items()}
# 仅为示意输入:10 克 22K 金,按示例价格每克 117.8239 计算,
# 加工费 12%,税率 20%。
print(jewelry_quote(QuoteInput(
weight_g=Decimal("10"),
karat_price_per_g=Decimal("117.8239"),
making_pct=Decimal("0.12"),
tax_rate=Decimal("0.20"),
)))使用上述输入,它会输出金属价值 1178.24、加工费 141.39、税费 263.93,总计 1583.55。加工费和税率只是占位值,并非建议。是否征税、对哪些部分征税以及税率多少,请咨询您的会计师或税务顾问。
本文仅讲解计算方法,不构成投资、定价或税务建议。
回购与废金价值
从客户手中回购黄金的计算方向正好相反。起点同样是金属价值,但应以实际测得的成色为准,而不是印记所标注的 K 数:
废金价值 = 克重 × 成色 ÷ 1,000 × 每克现货价格 − 精炼及处理扣费
收购方通常会检测成色,例如采用 XRF 分析或酸试法,因为较旧的饰品可能达不到其印记标准,而金链中的焊料也会拉低平均纯度。请在代码中将扣费作为明确且有文档说明的参数,而不是将其隐藏在压低的现货价格中,这样它才能在报价和审计中清晰呈现。
这里请使用每克 24K 价格(或带 unit=gram 的 /latest)作为现货价格,再自行应用测得的成色。/carat 返回的 K 金价格假定纯度恰好为 K ÷ 24,这适用于按 K 数为新品定价,但不适用于 912 这样的检测结果。
实施清单
- 一次性请求
carat=all,并按套餐的更新间隔进行缓存,而不是每个 K 数或每个商品各调用一次。 - 在每份报价和订单中保存所用的价格、时间戳和纯度,以便日后能够解释每个数字的来源。
- 使用
date查询历史 K 金价格,例如在重新核算旧发票时。通过 API 获取黄金和白银历史价格一文介绍了更长的时间范围和本地存储。 - 只在显示时进行四舍五入,并使用每种货币各自的小数位数。
- 将 API 密钥保存在服务器上。如果想在网店中显示金价牌而又不想编写代码,可以使用可嵌入小组件。
- 如果只需要一两种 K 数,在
/latest数据上套用公式即可,所有套餐均适用。/carat则省去了计算,在付费套餐中直接返回现成且一致的数字。
API 文档介绍了 /carat 的每个参数,定价页面列出了包含该端点的套餐,黄金价格 API 指南则全面介绍了密钥、错误处理和缓存。如果想用您自己的商品目录试一试,请注册获取密钥。