如何在C语言中将数值向下取整到两位小数(修改实际值)
C语言实现数值向下取整到两位小数(修改数值本身)
利用math.h的floor()函数实现
math.h里没有直接向下取整到两位小数的内置函数,但可以基于floor()(向下取整到整数)通过缩放数值来实现:
#include <math.h> int main() { double x = 0.1234; x = floor(x * 100) / 100; // x变为0.12 double y = 3.14159; y = floor(y * 100) / 100; // y变为3.14 // 负数场景示例:向下取整两位小数应为-0.13 double z = -0.1234; z = floor(z * 100) / 100; // z变为-0.13 return 0; }
编译时需链接数学库(例如GCC编译需加-lm参数)。
不依赖math.h的实现方法
仅针对正数场景时,可通过强制类型转换截断小数部分:
int main() { double x = 0.1234; x = (int)(x * 100) / 100.0; // x变为0.12 double y = 3.14159; y = (int)(y * 100) / 100.0; // y变为3.14 return 0; }
注意:该方法不适用于负数,比如-0.1234会被转为-0.12,不符合向下取整的逻辑(正确结果应为-0.13)。
规避浮点数精度问题
由于二进制浮点数无法精确表示部分十进制小数,可能出现0.29 * 100 = 28.999999999999996这类精度误差,导致取整错误。可通过添加极小偏移量解决:
x = floor((x + 1e-8) * 100) / 100;
内容的提问来源于stack exchange,提问作者Nox5692
相关产品推荐
相关产品推荐

