From 48bd255d5157d439620881134b49be48e5973ef9 Mon Sep 17 00:00:00 2001 From: tomoat Date: Wed, 9 Feb 2022 16:49:03 +0800 Subject: [PATCH] Update numbers.md --- book/contents/basic/base-type/numbers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/contents/basic/base-type/numbers.md b/book/contents/basic/base-type/numbers.md index 976a33da..fcffa553 100644 --- a/book/contents/basic/base-type/numbers.md +++ b/book/contents/basic/base-type/numbers.md @@ -156,7 +156,7 @@ fn main() { 你可能以为,这段代码没啥问题吧,实际上它会 *panic*(程序崩溃,抛出异常),因为二进制精度问题,导致了 0.1 + 0.2 并不严格等于 0.3,它们可能在小数点 N 位后存在误差。 -那如果非要进行比较呢?可以考虑用这种方式 `(0.1 + 0.2 - 0.3).abs() < 0.00001` ,具体小于多少,取决于你对精度的需求。 +那如果非要进行比较呢?可以考虑用这种方式 `(0.1_f64 + 0.2 - 0.3).abs() < 0.00001` ,具体小于多少,取决于你对精度的需求。 讲到这里,相信大家基本已经明白了,为什么操作浮点数时要格外的小心,但是还不够,下面再来一段代码,直接震撼你的灵魂: @@ -285,7 +285,7 @@ use num::complex::Complex; 之前提到了过 Rust 的数值类型和运算跟其他语言较为相似,但是实际上,除了语法上的不同之外,还是存在一些差异点: - **Rust 拥有相当多的数值类型**. 因此你需要熟悉这些类型所占用的字节数,这样就知道该类型允许的大小范围以及你选择的类型是否能表达负数 -- **类型转换必须是显式的**. Rust 永远也不会偷偷把你的 16bit 整数转换成 32bit 整数 +- **类型转换必须是显式的**. Rust 永远也不会偷偷把你的 16bit 整数转换成 32bit 整数,因为这样做会导致精度丢失 - **Rust 的数值上可以使用方法**. 例如你可以用以下方法来将 `13.14` 取整: `13.14_f32.round()`,在这里我们使用了类型后缀,因为编译器需要知道 `13.14 `的具体类型 数值类型的讲解已经基本结束,接下来,来看看字符和布尔类型。