You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言截断数字:无浮点数提取末尾三位数值的方法问询

解决获取十进制末尾三位的问题

你之前用位运算number_decimal = 123456 & 0x07出错的原因很直接:0x07是二进制111,只能截取二进制的最后三位(对应十进制0-7),但你需要的是十进制的末尾三位,这两者完全不是一回事——因为1000不是2的整数次幂,没法用简单的位掩码实现。

正确实现方式

直接用取模运算符%计算原数除以1000的余数,这就是十进制末尾三位的数值:

unsigned long num = 123456;
unsigned long number_integer = num / 1000; // 得到123
unsigned int number_decimal = num % 1000; // 得到456

结合sprintf输出的完整示例

要保证小数部分始终是三位(比如原数是1234时,要输出1.234而不是1.23),可以在sprintf格式串里用%03u补前导零:

char output_buf[32];
sprintf(output_buf, "%lu.%03u", number_integer, number_decimal);
// 之后将output_buf通过UART发送即可

补充说明

位运算仅适用于除数是2的整数次幂的场景(比如取二进制最后4位用& 0xF,对应十进制除以16取余)。对于十进制位数截取,因为10不是2的幂,必须用除法和取模运算来实现。

内容的提问来源于stack exchange,提问作者Gunn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:22:36