如何在小数点后截断浮点数(不取整)
How to truncate a floating point number after a certain number of decimal places (no rounding)?
我正试图打印精度为2点的数字684.545007
,因为该数字在684.54
之后会被截断(不取整)。
当我使用时
var = 684.545007;
printf("%.2fn",var);
它输出684.55
,但我想得到的是684.54
。
有人知道我该怎么纠正吗?
您想要的是截断。这应该有效(至少对于不是很大的数字):
printf(".2f", ((int)(100 * var)) / 100.0);
转换为整数会截断小数部分。
在C++11或C99中,您可以使用专用函数trunc
(来自标头<cmath>
或<math.h>
。这将避免对适合积分类型的值的限制。
std::trunc(100 * var) / 100 // no need for casts
这是我的方法。它看起来很难看,但在大多数情况下确实有效,例如var可以大于int,可以为零或奇怪的"-0"。不过,它不处理不定式和NaN。
double var = 684.545007; // or whatever
double var_trunc = var>=0. ? floor(var*100.)/100. : ceil(var*100.)/100.;
printf ("%gn", var_trunc);
printf("%.2fn", var - 0.005);
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 使用提升将数据从 PyObject 复制到浮点数 *
- 使用浮点数和双精度数的非常小数字的数学
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何在 c++ 中将小数点后两位数的浮点数分配给另一个浮点数
- 返回浮点数的小数位数
- txt 文件中浮点数的最大和最小值
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 将浮点数转换为无符号字符数组并打印出来
- 如何在小数点后截断浮点数(不取整)
- 小数点后4位的随机浮点数
- 将浮点数限制为小数点后两位
- 变体浮点数到双精度值转换,四舍五入到小数点后 1 位
- 将浮点数与小数点后三位进行比较
- 将浮点数四舍五入到小数点后一位,然后转换为字符串
- 如何正确格式化c++浮点数到小数点后两位
- 四舍五入浮点数:精确地输出小数点后的两位数字
- 如果我将带小数点的数字赋值给整数而不是浮点数会发生什么?