截断(浮点数到整数)

trunc 指令用于将浮点数转换为整数。它之所以命名为截断,是因为在转换过程中会截断数字的小数部分。此指令有有符号和无符号版本。

还有另一个 trunc 指令,它会在不转换为整数的情况下截断浮点数的小数部分。

试一试

(module
  (import "console" "log" (func $log (param i32)))
  (func $main

    f32.const 10.5 ;; push an f32 onto the stack

    i32.trunc_f32_s ;; convert from f32 to signed i32 rounding towards zero (.5 will be lost)

    call $log ;; log the result

  )
  (start $main)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });

语法

wat
;; push an f32 onto the stack
f32.const 10.5

;; convert from f32 to signed i32 rounding towards zero (.5 will be lost)
i32.trunc_f32_s

;; the top item on the stack will now be the value 10 of type f32
指令 二进制操作码
i32.trunc_f32_s 0xa8
i32.trunc_f32_u 0xa9
i32.trunc_f64_s 0xaa
i32.trunc_f64_u 0xab
i64.trunc_f32_s 0xae
i64.trunc_f32_u 0xaf
i64.trunc_f64_s 0xb0
i64.trunc_f64_u 0xb1