琉离铟落的小窝琉离铟落的小窝
← 返回文章列表
2026-06-24
#Cangjie#入门教程

浮点类型

仓颉的基本数据类型

2.2.1 什么是浮点类型?

浮点类型就是用来表示带小数的数字,比如 3.14、0.001、-9.8 等。

仓颉提供了三种浮点类型:

类型 位数 有效数字位(约) 对应 IEEE 754
Float16 16 3 位 半精度(binary16)
Float32 32 6 位 单精度(binary32)
Float64 64 15 位 双精度(binary64)
IMPORTANT

在多种浮点类型都适合的情况下,首选 Float64。因为精度低的浮点类型在多次计算后误差会快速累积,而且能精确表示的整数范围也很有限。


2.2.2 浮点字面量

十进制写法

最常见的写法,就是日常生活中的小数:

Cangjie
let a: Float32 = 3.14       // 普通小数  3.140000
let b: Float32 = 2e3        // 科学计数法:2 × 10³ = 2000.000000
let c: Float32 = 2.4e-1     // 2.4 × 10⁻¹ = 0.240000
let d: Float64 = .123e2     // 0.123 × 10² = 12.300000
ℹ️NOTE

eE 表示以 10 为底的指数,如 2e3 = 2 × 10³ = 2000,2e-1 = 2 × 10⁻¹ = 0.2

十六进制写法

0x0X 开头,必须包含以 pP 为前缀的指数部分(底数为 2):

Cangjie
let e: Float64 = 0x1.1p0    // 1.0625 × 2⁰ = 1.0625
let f: Float64 = 0x1p2      // 1.0 × 2² = 4.0
let g: Float64 = 0x.2p4     // 0.125 × 2⁴ = 2.0
💡TIP

十六进制浮点数不常用,了解即可。p 表示以 2 为底的指数,如 0x1p2 = 1.0 × 2² = 4.0


2.2.3 类型后缀

和整型类似,浮点数也可以通过后缀明确类型:

后缀 类型
f16 Float16
f32 Float32
f64 Float64

使用示例:

Cangjie
let a = 3.14f32       // Float32 类型
let b = 2e3f32        // Float32 类型,值为 2000.0
let c = 2.4e-1f64     // Float64 类型,值为 0.24
let d = .123e2f64     // Float64 类型,值为 12.3

2.2.4 小结

概念 要点
浮点类型 Float16(3位精度)、Float32(6位精度)、Float64(15位精度)
首选类型 Float64,精度高、误差小
十进制字面量 3.142e3(科学计数法,e 底数为 10)
十六进制字面量 0x1.1p0(p 底数为 2,必须带指数)
类型后缀 f16f32f64

2.2.5 常见问题

Q1:浮点数计算为什么不精确?

这不是仓颉的问题,而是所有编程语言都面临的问题。因为计算机用二进制存储小数,而很多十进制小数(比如 0.1)无法用二进制精确表示——就像用十进制无法精确表示 1/3(结果是 0.3333...)一样。

💡TIP

日常开发中这点误差通常可以忽略。如果需要精确计算(比如金额),可以用专门的处理方式。

Q2:`Float64` 和 `Float32` 选哪个?

无脑选 Float64。原因:

  • Float64 有约 15 位有效数字,Float32 只有约 6 位
  • Float32 在多次计算后误差会快速累积
  • 大多数场景下,多占用的那点内存不值一提

Q3:科学计数法的 `e` 是什么意思?

e 表示"乘以 10 的几次方":

写法 含义 结果
2e3 2 × 10³ 2000
2e-1 2 × 10⁻¹ 0.2
1.5e2 1.5 × 10² 150

相当于把小数点往右(正指数)或往左(负指数)移动。

Q4:十六进制浮点数什么时候用?

基本用不到。十六进制浮点数是留给需要精确控制二进制表示的底层场景用的(比如硬件驱动、科学计算库)。普通开发者只需要知道有这回事,用到时再回来查就行。