单位换算 · 设计单位

移动端单位

dp/sp/pt/px/不同 DPI 互转

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 59 次使用
dp / sp / pt / px 一屏联动 · 改密度即重算
换算基准density · scale · DPR mdpi 160dpi · scale 1× · DPR 1
有效数字 6 以「物理像素 physical px」为三平台统一基准
密度桶直观对比 · 同一 16 dp 在各 Android 密度下渲染的物理像素长度(当前桶高亮)

常用换算速查 quick reference · 点击填入

单位与基准说明 about

就绪 · 输入任一单位数值即可全单位联动换算
第一节

关于本工具

About

设计师在 Sketch 里标注的 16sp,开发在 2.75x 屏上量出来可能是 44pt。这个工具把 dp、sp、pt、px 和不同 DPI 之间的换算拆成一组选择器:选好源单位与目标单位,填数值即出结果。所有运算在浏览器内完成,不向服务端发送任何输入值——适合在 Sketch 与 Android Studio 之间来回切屏时快速核对标注。

使用场景

iOS 标注稿转安卓

设计师交付了 375pt 的 iOS 标注稿,安卓开发需要 360dp。手动换算每个元素尺寸,20 个页面算了 3 小时,还漏标了 3 处间距。用本工具输入标准 DPI(iOS @2x → 安卓 mdpi),批量把 pt 值转成 dp,误差控制在 0.5px 以内。以前半天的工作量,现在 10 分钟对完所有标注。

H5 页面适配多屏

设计稿给的是 750px 宽度(@2x),前端要写 rem 或 vw,但不同手机 DPR 不一样。以前靠心算比例,结果在 iPhone 12 上按钮正常,在红米 Note 上文字溢出。用本工具输入设计稿 px 值,分别算出 320/375/414/428 四种视口下的对应 px,直接写进媒体查询,上线后未收到适配投诉。

印刷海报转电子屏

客户给了 300dpi 的印刷 PDF,要放到商场 4K 竖屏播放。把 PDF 里的 sp 字号直接转成 4K 屏的 px,结果文字在屏上只有指甲盖大。用本工具输入原稿 DPI(300)和目标屏 DPI(163),算出 sp 与 px 的换算系数,把正文从 12sp 调成 28px,播放时清晰度与印刷样一致。

微信小程序切图换算

设计稿用 750px 画布(@2x),微信小程序使用 rpx(基于 750 物理宽度)。但设计师给的 sp 字号在 iOS 和安卓上显示大小不同。用本工具把 sp 值分别转成 iOS 和安卓的对应 px,再统一换算成 rpx,确保两端字号视觉一致。避免了上架后被投诉 iOS 字小、安卓字大的问题。

旧项目 UI 迁移新框架

老项目用 px 写死,新框架要求全部用 dp/sp。手动改 200 个文件,每改一个要算一遍 DPI 比例。用本工具输入原 px 值和原 DPI(320dpi),批量输出对应 dp 值,sp 字号同理。迁移后页面在低端机上不再出现按钮错位,且字号随系统字体缩放。

对比矩阵

维度本工具竞品 A(在线转换站)传统方法(手动计算)
隐私所有单位转换在浏览器本地完成,不上传任何数值需将 dp/sp/pt/px 数值上传至服务器处理完全离线,无隐私风险
速度输入即出结果,无网络延迟需等待上传 + 服务器响应,受网速影响需手动查公式、计算器逐项换算,耗时数分钟
离线可用完全离线,无网络也可使用必须联网,断网无法访问完全离线,依赖纸笔或计算器
DPI 适配支持自定义 DPI(如 160/320/480),适配不同屏幕通常只固定 160/320 DPI,不支持自定义需自行查找不同 DPI 的换算系数,容易出错
多单位互转一次输入支持 dp/sp/pt/px 任意两者互转多数只支持 dp ↔ px 或 sp ↔ px,需多次操作需分别记忆不同单位间的换算公式,反复计算
学习成本打开即用,无需理解换算原理需理解单位含义并选择正确转换方向需掌握 dp/sp/pt/px 定义及 DPI 换算公式
第二节

使用指南

Getting Started

使用步骤

  1. 1在「原值」输入框键入数字(如 16),自动触发所有目标单位实时换算,结果区同步更新
  2. 2从「原单位」下拉列表选择当前值的单位(dp/sp/pt/px),右侧「目标单位」自动匹配对应 DPI 选项
  3. 3如需指定屏幕密度,点击「目标 DPI」输入框填入数值(如 320),换算结果按该密度重新计算
  4. 4点击任意结果行右侧的「复制」图标,该单位数值即写入剪贴板,页面顶部出现「已复制」提示

输入输出示例

输入输出说明
16sp(Android 基准密度 mdpi,目标密度 xxhdpi,单位 px)48px常规:sp 在 mdpi 下 1sp=1px,xxhdpi 为 3x 密度,16×3=48px,验证基础缩放逻辑
10dp(Android 基准密度 mdpi,目标密度 xhdpi,单位 px)20px常规:dp 与 px 在 mdpi 下 1:1,xhdpi 为 2x,10×2=20px,覆盖 dp 到 px 典型场景
1pt(标准 72pt/inch,目标密度 326ppi(iPhone 6/6s/7/8),单位 px)4.53px边界:pt 是物理单位(1/72 英寸),在 326ppi 屏幕下 1pt=326/72≈4.53px,验证 pt 与 px 的物理换算
0px(源单位 px,目标单位 dp,目标密度 hdpi)0dp边界:零值输入,验证工具不会因除零或空值报错,且输出明确为 0
1dp(Android 基准密度 mdpi,目标密度 ldpi,单位 px)0.75px边界:ldpi 为 0.75x 密度,1dp 在 mdpi 下为 1px,转换到 ldpi 需按比例缩小,验证低密度缩放
16sp(Android 基准密度 mdpi,目标密度 xxxhdpi,单位 px)64px易错:xxxhdpi 为 4x 密度,16×4=64px,但部分工具可能误用 3.5x 或 4.5x,暴露密度因子选择差异
12pt(标准 72pt/inch,目标密度 160ppi(mdpi),单位 px)26.67px易错:pt 转 px 需同时考虑 pt 的物理定义(1pt=1/72 英寸)和屏幕 ppi,160ppi 下 12pt=12×(160/72)≈26.67px,验证 pt 与 dp 类单位的计算差异

常见错误对照

1.混淆 sp 与 dp 的缩放基准

✗ 错误输入 16sp,期望在 320dpi 屏幕上得到 16px,直接当 dp 用
✓ 修复sp 用于字体:16sp × 2(320dpi 缩放比)= 32px;dp 用于布局:16dp × 2 = 32px

sp 和 dp 在相同 DPI 下物理像素相同,但 sp 会跟随系统字体缩放设置,dp 固定不变。Android 文档明确区分两者用途。

2.忽略 DPI 缩放因子计算方式

✗ 错误在 320dpi 屏幕上,认为 1dp = 320/160 = 2px,直接写 1dp = 2px
✓ 修复320dpi 对应 density=2(mdpi=160 为基准),1dp = 2px 正确,但需注意非整数 DPI 如 213dpi 时 density=1.33,实际 px = dp × 1.33

Android 用 density = dpi / 160 计算缩放比,非整数 density 在布局中可能产生子像素舍入误差,UI 测试需在真机不同 DPI 下验证。

3.pt 与 dp 混用,误以为 1pt=1dp

✗ 错误设计稿标注 12pt,开发时直接写 12dp
✓ 修复1pt = 1/72 英寸,1dp ≈ 1/160 英寸(mdpi),所以 12pt ≈ 12 × (160/72) ≈ 26.67dp

pt 是物理尺寸单位(1/72 英寸),dp 是密度无关像素(1/160 英寸),两者物理长度不同,混用会导致跨设备显示偏差。

4.px 转 dp 时忘记除以 density

✗ 错误设计稿宽度 1080px(xxhdpi,density=3),直接写 width=1080dp
✓ 修复dp = px / density = 1080 / 3 = 360dp

px 转 dp 必须除以设备 density,否则在低 DPI 设备上布局会溢出屏幕。xxhdpi 的 density=3,1080px 对应 360dp。

5.sp 转 px 时忽略用户字体缩放

✗ 错误用固定公式 sp × density = px,认为结果对所有人一致
✓ 修复sp 转 px 需乘以系统字体缩放比例:px = sp × density × fontScale;fontScale 默认 1.0,用户可调至 1.3 等

Android 系统设置中字体大小可独立缩放,sp 必须考虑 fontScale 因子,否则对大字用户可能显示不全或溢出。

6.输入非标准 DPI 值时误用整数近似

✗ 错误输入 213dpi(tvdpi),直接取 density=1.5(240dpi 对应值)
✓ 修复213dpi 的 density = 213/160 ≈ 1.33125,px = dp × 1.33125

非标准 DPI(如 tvdpi=213、ldpi=120)的 density 不是整数,四舍五入会导致布局偏差,应使用精确浮点数计算。

7.混淆 px 与 dp 在 Web 与 Android 的差异

✗ 错误将 Web CSS 中的 px(1px=1/96英寸)直接当作 Android px 使用
✓ 修复Android px 是物理像素,CSS px 是参考像素(1/96英寸),两者无直接换算关系;应通过 DPI 换算:Android px = CSS px × (设备 dpi / 96)

Web 的 CSS px 是抽象单位(1/96英寸),Android 的 px 是屏幕物理像素,跨平台转换必须引入设备 DPI 参数。

第三节

工作原理

How It Works

核心公式

px = dp × (dpi / 160)

变量说明

  • px屏幕物理像素,单位 px
  • dp密度无关像素,单位 dp
  • dpi屏幕每英寸像素数,如 320

示例

设计稿标注 160 dp,在 320 dpi 的屏幕上:px = 160 × (320 / 160) = 160 × 2 = 320 px,即实际渲染宽度为 320 像素。

输入数值与单位(dp / sp / pt / px)识别单位类型查表获取目标 DPI 系数(mdpi / hdpi / xhdpi …)输出换算结果(px 值)全部计算在浏览器本地完成无需上传数据,无网络请求,即时响应
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

import math def dp_to_px(dp: float, dpi: float = 160) -> float: """dp 转 px,基于 dpi(默认 160 = mdpi)""" return dp * (dpi / 160) def px_to_dp(px: float, dpi: float = 160) -> float: """px 转 dp""" return px / (dpi / 160) def pt_to_px(pt: float, dpi: float = 72) -> float: """pt 转 px,默认 1pt = 1px @72dpi""" return pt * (dpi / 72) def sp_to_px(sp: float, font_scale: float = 1.0, dpi: float = 160) -> float: """sp 转 px,考虑用户字体缩放(默认 1.0)""" dp = sp * font_scale return dp_to_px(dp, dpi) # 示例:在 320dpi(xhdpi)下,16dp = ? px print(dp_to_px(16, 320)) # 32.0 # 示例:12pt @96dpi = ? px print(pt_to_px(12, 96)) # 16.0
/** * dp → px(基于设备 dpi) * @param {number} dp * @param {number} dpi - 设备像素密度,默认 160(mdpi) * @returns {number} */ function dpToPx(dp, dpi = 160) { return dp * (dpi / 160); } /** px → dp */ function pxToDp(px, dpi = 160) { return px / (dpi / 160); } /** pt → px(1pt = 1px @72dpi) */ function ptToPx(pt, dpi = 72) { return pt * (dpi / 72); } /** sp → px(考虑字体缩放) */ function spToPx(sp, fontScale = 1.0, dpi = 160) { return dpToPx(sp * fontScale, dpi); } // 示例 console.log(dpToPx(16, 320)); // 32 console.log(ptToPx(12, 96)); // 16
package main import "fmt" // dpToPx 将 dp 转换为 px,dpi 默认 160(mdpi) func dpToPx(dp float64, dpi float64) float64 { return dp * (dpi / 160) } // pxToDp 将 px 转换为 dp func pxToDp(px float64, dpi float64) float64 { return px / (dpi / 160) } // ptToPx 将 pt 转换为 px(1pt = 1px @72dpi) func ptToPx(pt float64, dpi float64) float64 { return pt * (dpi / 72) } // spToPx 将 sp 转换为 px,考虑字体缩放 func spToPx(sp float64, fontScale float64, dpi float64) float64 { dp := sp * fontScale return dpToPx(dp, dpi) } func main() { fmt.Println(dpToPx(16, 320)) // 32 fmt.Println(ptToPx(12, 96)) // 16 }
/** dp → px,默认 dpi=160(mdpi) */ export function dpToPx(dp: number, dpi: number = 160): number { return dp * (dpi / 160); } /** px → dp */ export function pxToDp(px: number, dpi: number = 160): number { return px / (dpi / 160); } /** pt → px(1pt = 1px @72dpi) */ export function ptToPx(pt: number, dpi: number = 72): number { return pt * (dpi / 72); } /** sp → px,考虑字体缩放 */ export function spToPx(sp: number, fontScale: number = 1.0, dpi: number = 160): number { return dpToPx(sp * fontScale, dpi); } // 示例 console.log(dpToPx(16, 320)); // 32 console.log(ptToPx(12, 96)); // 16
#!/bin/bash # dp 转 px(基于 dpi,默认 160) dp_to_px() { local dp=$1 local dpi=${2:-160} echo "scale=4; $dp * ($dpi / 160)" | bc } # px 转 dp px_to_dp() { local px=$1 local dpi=${2:-160} echo "scale=4; $px / ($dpi / 160)" | bc } # pt 转 px(默认 72dpi) pt_to_px() { local pt=$1 local dpi=${2:-72} echo "scale=4; $pt * ($dpi / 72)" | bc } # 示例 dp_to_px 16 320 # 32.0000 pt_to_px 12 96 # 16.0000
第五节

常见问题

Q & A
我设计稿里标的 px,怎么转成 dp 给开发?

直接使用本工具的 px → dp 转换。需要先设置目标设备的 DPI(一般在 160-640 之间,主流手机在 320-480),输入 px 值后工具会自动算出对应 dp。注意 px 和 dp 不是固定比例,同一 px 在不同 DPI 设备上对应的 dp 不同。开发通常以 160 DPI 为基准,所以 1dp ≈ 1px(160 DPI 时),在 320 DPI 设备上 1dp = 2px。

sp 和 dp 到底有什么区别?什么时候用 sp 什么时候用 dp?

dp 是密度无关像素,用于布局尺寸(宽高、间距、边距),不随系统字体缩放变化。sp 是缩放无关像素,专用于字体大小,会跟随用户系统字体设置缩放。本工具支持 sp 与 dp 互转,但转换时默认按 1:1(即 1sp = 1dp 基准),因为实际比例取决于用户系统字体缩放倍数。建议:布局用 dp,文字用 sp。

为什么我转完的数值不是整数?正常吗?

完全正常。px、dp、sp、pt 这些单位之间的换算涉及不同 DPI 基准(160、72 等),结果通常是小数。例如 50px 在 326 DPI(iPhone 6)下转 dp 是 50 ÷ (326/160) ≈ 24.54dp。开发中建议直接使用小数,或按设计规范四舍五入到 0.5 的倍数。本工具结果保留 2 位小数,足够精确。

这个工具支持哪些 DPI 值?我想转 2K 屏的尺寸。

支持任意正整数 DPI,从低端屏(120 DPI)到高分屏(640+ DPI)都能算。2K 屏常见 DPI 在 300-500 之间(如 27 寸 2560×1440 约 109 DPI,手机 1440p 约 500+ DPI)。输入框直接填数字即可,不在下拉列表里的也能手动输入。工具按标准公式换算:目标单位值 = 源值 × (目标 DPI / 基准 DPI)。

pt 和 px 换算时,为什么有的工具结果不一样?

因为 pt 的基准 DPI 不同。pt(点)是印刷单位,1pt = 1/72 英寸。本工具默认以 72 DPI 为 pt 基准(1pt = 1px 在 72 DPI 下),但部分设计软件(如 Figma)按 96 DPI 显示 pt。如果你发现结果差 1.33 倍,检查另一方工具用的基准 DPI 是否为 96。本工具结果区标注了所用基准,可对照调整。

我在浏览器里 F12 看到的 px,跟 Android 开发里的 dp 怎么换算?

浏览器 px 是 CSS 像素,Android dp 是密度无关像素,两者概念等价但基准不同。CSS px 基准是 96 DPI,Android dp 基准是 160 DPI。换算公式:dp = CSS px × (160 / 96) ≈ CSS px × 1.667。例如浏览器里量出 100px,对应 Android dp 约 167dp。本工具支持直接输入源 DPI 和目 DPI,把浏览器 DPI 设 96、Android 设 160 即可。

这个工具需要上传图片吗?我的设计稿能保密吗?

不需要上传任何文件。工具是纯前端实现(FE),所有换算在浏览器本地完成,输入的数字不会发送到任何服务器。断网也能用。适合处理未公开的设计稿或保密项目的尺寸数据。注意:手动输入的数值会在页面刷新后清空,不会本地缓存。

我输入了 0 或者负数,为什么也能算出来?

本工具对输入值不做正负限制,0 和负数按数学公式正常换算(如 -10px → -5.33dp),这在某些场景下有用(如负边距或反向偏移)。但如果只是想确认“0 是否有效”,答案是:能算,结果就是 0。建议输入前确认数值的物理意义,负值在设计稿中通常用于特殊定位,普通场景建议用正数。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭