实验室配标准液
生物系研究生小陈需要配制 100 mL 浓度为 500 ppm 的 NaCl 溶液,但手边只有 mol/L 的母液(5 mol/L)。他换算后发现 500 ppm NaCl 约等于 0.00855 mol/L,需取母液 0.171 mL。本工具支持 ppm 与 mol/L 互转,且自动识别溶质摩尔质量(如 NaCl 为 58.44 g/mol),避免手动计算时的单位混淆和有效数字错误,确保标准曲线线性。
| 物质 | 摩尔质量 M (g/mol) | 1 mol/L = ? g/L |
|---|
配培养基时,1 mg/mL 的母液要稀释到 50 μM,算到一半发现 mol/L 和 ppm 还得再换算一遍。这个工具把摩尔浓度、质量浓度、ppm 和百分比放在同一界面,输入一个值,其余自动算出。所有计算在浏览器本地执行,数据不会离开设备——实验记录、质控报告复核时顺手就能验一遍。
生物系研究生小陈需要配制 100 mL 浓度为 500 ppm 的 NaCl 溶液,但手边只有 mol/L 的母液(5 mol/L)。他换算后发现 500 ppm NaCl 约等于 0.00855 mol/L,需取母液 0.171 mL。本工具支持 ppm 与 mol/L 互转,且自动识别溶质摩尔质量(如 NaCl 为 58.44 g/mol),避免手动计算时的单位混淆和有效数字错误,确保标准曲线线性。
鱼塘老板老周购入一批海水鱼苗,要求盐度 15‰(即 15000 ppm),但他买的工业盐包装上写的是“每升水加 3 g 盐”这种 mg/mL 单位。他需要确认 3 mg/mL 是否等于 3000 ppm?本工具直接显示 1 mg/mL = 1000 ppm,他算出需加 15 mg/mL 即 15 g/L,避免了鱼苗因盐度骤变死亡的经济损失。
果农老李买回一瓶 50% 乳油农药,说明书要求稀释成 800 ppm 的药液。他习惯用“一喷雾器(15 L)加多少毫升原药”来算。本工具帮他换算:50% 原药即 500000 ppm,稀释到 800 ppm 需稀释 625 倍,15 L 水需加原药 24 mL。避免了因浓度过高烧叶或过低无效的风险。
环保检测员小王拿到一份工业废水报告:COD 为 120 mg/L,氨氮为 0.5 mg/L。但排放标准 GB 8978-1996 中部分限值以 ppm 为单位。他需快速确认 120 mg/L 是否等于 120 ppm(1:1 关系仅适用于水溶液)。本工具明确提示“mg/L 与 ppm 在稀水溶液中数值相等”,帮助他直接对照标准判定是否超标,避免误判。
甜品师阿琳在法国食谱上看到“糖浆浓度 30°Bé(波美度)”,但她的糖度计只显示百分比。她查到 30°Bé 约等于 54.7% 糖度(蔗糖溶液)。本工具支持百分比与波美度(需查表)的近似换算,她输入 54.7% 得到 547000 ppm,确认与配方一致,避免了糖浆结晶或发酵失败。
| 维度 | 本工具 | 竞品 A(在线换算站) | 传统方法(手动计算) |
|---|---|---|---|
| 单位覆盖 | mol/L、mg/mL、ppm、百分比、mg/L、g/L 等 10+ 单位互转 | 常见 5-8 种单位,部分缺 mg/mL ↔ ppm | 需记忆单位定义与换算系数,易遗漏小众单位 |
| 输入容错 | 自动识别大小写、空格、科学记数法(如 1e-3) | 多数要求严格格式,空格或大小写错误报错 | 完全依赖人工核对,小数点错位风险高 |
| 反向换算 | 支持任意两个单位双向换算(如 ppm → mg/mL 与 mg/mL → ppm) | 部分仅支持固定方向(如仅 mol/L → mg/mL) | 需手动推导逆运算,增加计算步骤 |
| 实时校验 | 输入非法值(负数、超范围)即时提示并阻止计算 | 部分网站提交后才报错,或静默返回错误结果 | 无校验机制,错误需自行发现 |
| 隐私 | 纯浏览器计算,数据不上传服务器 | 数据需发送至服务器处理,有日志留存风险 | 完全离线,但需自行保管计算草稿 |
| 速度 | 毫秒级响应,无网络延迟 | 依赖服务器响应,高峰期可能卡顿 | 取决于计算者熟练度,平均 10-30 秒/次 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 0.1 mol/L → mg/mL(溶质 NaCl,分子量 58.44) | 5.844 mg/mL | 常规:实验室常用浓度换算,验证 mol/L 到质量浓度的基本公式(浓度 × 分子量) |
| 1000 ppm → 百分比 | 0.1% | 常规:ppm 与百分比的典型换算(1% = 10000 ppm),验证比例关系 |
| 1 mg/mL → ppm(水溶液,密度 1 g/mL) | 1000 ppm | 常规:稀水溶液中 mg/mL 与 ppm 等价(1 mg/L = 1 ppm),验证默认密度假设 |
| 0.001 mol/L → ppm(溶质 H₂SO₄,分子量 98.08) | 98.08 ppm | 边界:极低浓度(mM 级),验证小数精度与 ppm 换算的正确性 |
| 100% → ppm | 1000000 ppm | 边界:纯物质(100%),验证百分比上限与 ppm 的极限换算(1% = 10000 ppm) |
| 0.0000001 mol/L → mg/mL(溶质任意,分子量 100) | 0.00001 mg/mL | 边界:极低浓度(nM 级),验证工具对极小数值的科学计数法处理与精度保留 |
| 5 mg/mL → mol/L(溶质 NaOH,分子量 40.00) | 0.125 mol/L | 易错:质量浓度转摩尔浓度,用户常忘记输入分子量或单位混淆(mg/mL 与 g/L 差 1000 倍) |
| 0.5% → mg/mL(溶质葡萄糖,分子量 180.16) | 5 mg/mL | 易错:百分比转质量浓度时,用户误以为 1% = 10 mg/mL(实际需依赖溶质密度/分子量,此处假设水溶液密度 1 g/mL 则 1% = 10 mg/mL) |
1.ppm 与 mg/L 混淆,误以为 1 ppm = 1 mg/L 适用于所有溶液
浓度 500 ppm = 500 mg/L,直接用于油样或有机溶剂确认溶液为水溶液(密度 ≈ 1 g/mL)时,1 ppm ≈ 1 mg/L;非水溶液需查密度换算ppm 是质量/质量比(mg/kg),mg/L 是质量/体积比。仅当溶液密度为 1 g/mL 时二者数值相等;油、酒精等密度不同,直接等同会引入误差。
2.百分比与 ppm 换算时小数点位数错误
0.05% = 5000 ppm(实际应为 500 ppm)0.05% = 0.05 × 10000 = 500 ppm1% = 10000 ppm,换算因子是 10000 而非 1000。常见错误是将百分比直接乘以 1000,漏了一位。
3.mol/L 换算 mg/mL 时忽略摩尔质量单位
1 mol/L NaCl = 58.44 mg/mL(应为 58.44 g/L = 58.44 mg/mL?)1 mol/L NaCl = 58.44 g/L = 58.44 mg/mL(正确)mol/L 转 mg/mL 需乘以摩尔质量(g/mol)再除以 1000。NaCl 摩尔质量 58.44 g/mol,1 mol/L × 58.44 = 58.44 g/L = 58.44 mg/mL。若误用 mg 单位会差 1000 倍。
4.输入数值带单位字符串,工具未做智能解析时直接报错
输入框填 "500 ppm" 或 "0.5%" 而非纯数字仅输入数字 500,单位从下拉框或单选按钮选择 ppm多数浓度换算工具要求数字与单位分离输入。带单位字符串会被视为非法字符导致无法计算,或解析为 0。
5.ppm 与 ppb 混淆,数量级差 1000 倍
1 ppm = 1000 ppb(正确应为 1 ppm = 1000 ppb,但误写为 1 ppm = 1,000,000 ppb)1 ppm = 1000 ppbppm 是 10⁻⁶,ppb 是 10⁻⁹,相差 1000 倍。常见混淆是将 ppm 当作 10⁻⁹ 或误记换算因子为 10⁶。
6.百分比浓度误用体积百分比(% v/v)代替质量百分比(% w/w)
乙醇水溶液 50% 直接当作 50 g/100g 使用明确标注 50% v/v(体积比)或 50% w/w(质量比),根据工具支持的维度选择浓度换算工具通常只处理纯数值换算,不区分 v/v 与 w/w。用户若混用,结果可能偏差 5%-20%(因密度差异)。
7.mg/mL 转 g/L 时忘记除以 1000
500 mg/mL = 500 g/L(实际应为 0.5 g/L)500 mg/mL = 500 ÷ 1000 = 0.5 g/Lmg 到 g 是 1/1000,mL 到 L 也是 1/1000,所以 mg/mL 到 g/L 的换算因子是 1(分子分母同时除以 1000)。常见错误是只除一次。
8.输入极小浓度时科学计数法格式不被工具支持
输入 1e-6 或 0.000001 但工具只接受普通小数输入 0.000001(或工具明确说明支持科学计数法时再用 1e-6)部分前端工具未实现科学计数法解析,输入 1e-6 会被当作字符串或非法数字。建议先试用一个值确认支持格式。
c₁ × V₁ = c₂ × V₂
c₁初始浓度,单位 mol/LV₁初始体积,单位 Lc₂目标浓度,单位 mol/LV₂目标体积,单位 L实验室有 0.5 mol/L 的 NaCl 溶液 200 mL,需稀释至 0.1 mol/L。代入公式:0.5 × 0.2 = 0.1 × V₂,得 V₂ = 1.0 L。即需加水至总体积 1.0 L(加水 800 mL)。
5 种主流语言实现,复制即用:
def convert_concentration(value, from_unit, to_unit):
"""
浓度单位换算:支持 mol/L, mg/mL, ppm, 百分比(%, v/v 或 w/v)
返回换算后的数值,不处理单位字符串大小写
"""
# 统一转为 mg/mL 作为中间基准
to_mg_per_ml = {
'mol/L': value * 18.015, # 假设溶质为水(分子量 18.015 g/mol),仅作示例
'mg/mL': value,
'ppm': value / 1000, # 1 ppm ≈ 1 mg/L = 0.001 mg/mL
'%': value * 10 # 1% = 10 mg/mL(密度 1 g/mL 时)
}
mg_per_ml = to_mg_per_ml.get(from_unit)
if mg_per_ml is None:
raise ValueError(f"不支持的单位: {from_unit}")
from_mg_per_ml = {
'mol/L': lambda x: x / 18.015,
'mg/mL': lambda x: x,
'ppm': lambda x: x * 1000,
'%': lambda x: x / 10
}
converter = from_mg_per_ml.get(to_unit)
if converter is None:
raise ValueError(f"不支持的目标单位: {to_unit}")
return converter(mg_per_ml)
# 示例:将 1 mol/L 转换为 mg/mL(水溶液)
print(convert_concentration(1, 'mol/L', 'mg/mL')) # 输出: 18.015
print(convert_concentration(500, 'ppm', '%')) # 输出: 0.05function convertConcentration(value, fromUnit, toUnit) {
// 浓度换算:支持 mol/L, mg/mL, ppm, %
// 注意:mol/L 换算需指定溶质分子量,此处用 18.015(水)做示例
const toMgPerMl = {
'mol/L': value * 18.015,
'mg/mL': value,
'ppm': value / 1000,
'%': value * 10
};
const mgPerMl = toMgPerMl[fromUnit];
if (mgPerMl === undefined) throw new Error(`不支持的单位: ${fromUnit}`);
const fromMgPerMl = {
'mol/L': x => x / 18.015,
'mg/mL': x => x,
'ppm': x => x * 1000,
'%': x => x / 10
};
const converter = fromMgPerMl[toUnit];
if (!converter) throw new Error(`不支持的目标单位: ${toUnit}`);
return converter(mgPerMl);
}
console.log(convertConcentration(1, 'mol/L', 'mg/mL')); // 18.015
console.log(convertConcentration(500, 'ppm', '%')); // 0.05package main
import (
"fmt"
"errors"
)
// 浓度换算:mol/L 假设溶质为水(分子量 18.015 g/mol)
func convertConcentration(value float64, fromUnit, toUnit string) (float64, error) {
toMgPerMl := map[string]float64{
"mol/L": value * 18.015,
"mg/mL": value,
"ppm": value / 1000,
"%": value * 10,
}
mgPerMl, ok := toMgPerMl[fromUnit]
if !ok {
return 0, errors.New("不支持的单位: " + fromUnit)
}
fromMgPerMl := map[string]func(float64) float64{
"mol/L": func(x float64) float64 { return x / 18.015 },
"mg/mL": func(x float64) float64 { return x },
"ppm": func(x float64) float64 { return x * 1000 },
"%": func(x float64) float64 { return x / 10 },
}
converter, ok := fromMgPerMl[toUnit]
if !ok {
return 0, errors.New("不支持的目标单位: " + toUnit)
}
return converter(mgPerMl), nil
}
func main() {
fmt.Println(convertConcentration(1, "mol/L", "mg/mL")) // 18.015 <nil>
fmt.Println(convertConcentration(500, "ppm", "%")) // 0.05 <nil>
}#!/bin/bash
# 浓度换算 shell 函数:支持 mol/L, mg/mL, ppm, %
# mol/L 换算基于水(分子量 18.015),仅作示例
convert_concentration() {
local value=$1 from=$2 to=$3
# 先转为 mg/mL
case $from in
mol/L) mg_per_ml=$(echo "$value * 18.015" | bc -l) ;;
mg/mL) mg_per_ml=$value ;;
ppm) mg_per_ml=$(echo "$value / 1000" | bc -l) ;;
%) mg_per_ml=$(echo "$value * 10" | bc -l) ;;
*) echo "不支持的单位: $from" >&2; return 1 ;;
esac
# 从 mg/mL 转目标单位
case $to in
mol/L) result=$(echo "$mg_per_ml / 18.015" | bc -l) ;;
mg/mL) result=$mg_per_ml ;;
ppm) result=$(echo "$mg_per_ml * 1000" | bc -l) ;;
%) result=$(echo "$mg_per_ml / 10" | bc -l) ;;
*) echo "不支持的目标单位: $to" >&2; return 1 ;;
esac
echo "$result"
}
convert_concentration 1 mol/L mg/mL # 18.015
convert_concentration 500 ppm % # .05import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
public class ConcentrationConverter {
public static double convert(double value, String fromUnit, String toUnit) {
// mol/L 换算基于水(分子量 18.015),仅作示例
Map<String, Double> toMgPerMl = new HashMap<>();
toMgPerMl.put("mol/L", value * 18.015);
toMgPerMl.put("mg/mL", value);
toMgPerMl.put("ppm", value / 1000);
toMgPerMl.put("%", value * 10);
Double mgPerMl = toMgPerMl.get(fromUnit);
if (mgPerMl == null) throw new IllegalArgumentException("不支持的单位: " + fromUnit);
Map<String, Function<Double, Double>> fromMgPerMl = new HashMap<>();
fromMgPerMl.put("mol/L", x -> x / 18.015);
fromMgPerMl.put("mg/mL", x -> x);
fromMgPerMl.put("ppm", x -> x * 1000);
fromMgPerMl.put("%", x -> x / 10);
Function<Double, Double> converter = fromMgPerMl.get(toUnit);
if (converter == null) throw new IllegalArgumentException("不支持的目标单位: " + toUnit);
return converter.apply(mgPerMl);
}
public static void main(String[] args) {
System.out.println(convert(1, "mol/L", "mg/mL")); // 18.015
System.out.println(convert(500, "ppm", "%")); // 0.05
}
}在稀水溶液(密度≈1 g/mL)中,ppm 按质量比定义,1 ppm = 1 mg/kg,而 1 mg/L 近似等于 1 mg/kg,两者数值相等。但溶剂不是水或浓度很高时(如 10% 以上),溶液密度偏离 1,1 mg/L 就不等于 1 ppm。本工具在 ppm ↔ mg/L 转换时默认按水溶液近似处理,结果会注明“稀水溶液近似值”;若处理油、有机溶剂或高浓度溶液,请先确认密度再手动修正。
需要盐酸的摩尔质量(36.46 g/mol)和溶液密度。本工具内置常见酸碱的摩尔质量表,选“盐酸”后自动带入;但密度需用户填写(默认 1.0,仅对极稀溶液成立)。例如 0.5 mol/L 盐酸,密度 1.01 g/mL 时:质量浓度 = 0.5 × 36.46 = 18.23 g/L,除以 1010 g/L 得 1.8%。若密度留空,结果会给出“密度未知时的质量浓度 g/L”,不转百分比。
ppm 和百分比差 10000 倍(1% = 10000 ppm)。例如 5 ppm 转百分比是 0.0005%,工具默认保留 6 位有效数字,所以显示 0.000500%。如果觉得零太多,可以点击结果区的“科学计数法”切换开关,显示为 5.0×10⁻⁴ %。另外也可直接看 ppm 行,数值更直观。
可以离线用。本工具是纯前端实现(FE),所有换算逻辑都在浏览器本地执行,不向服务器发任何请求。首次加载页面后断网刷新,工具依然能正常输入和出结果。隐私方面:输入的数字不会离开本机,适合处理配方、实验记录等敏感数据。
工具在 mg/mL → mol/L 模式下会弹出摩尔质量输入框,单位默认 g/mol。如果不知道数值:工具内置了一个“常见物质”下拉菜单(含 NaCl、NaOH、HCl、H₂SO₄、葡萄糖等 20+ 种),选择后自动填入。不在列表中的物质,建议查 CAS 号或分子式后手动输入。注意摩尔质量必须填,否则无法完成换算。
最常见原因是单位选择不完整。工具四个输入框——数值、源单位、目标单位、物质(mol/L 相关时)——必须全部填写。如果只填数值和源单位,目标单位留空,按钮会灰色不可点。另外检查数值是否含字母或符号(如“1,000”带逗号),只接受纯数字和英文小数点。如果依然没反应,按 F12 看控制台是否有红色报错,截图发给客服。
土壤检测常用 mg/kg(质量比),与 ppm 数值等价。本工具百分比 ↔ ppm 换算基于质量比,所以结果可直接用。但注意土壤样品常以“干重”为基准,如果送检报告写的是“湿重浓度”,需先扣除含水率再换算。工具不处理含水率折算,建议在输入前将湿重值乘以(1 - 含水率)得到干重浓度。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。