17

如何在不四舍五入的情况下截断 C 中的小数位?

例如,如果数字是4.48

它只会显示4.4

%.1f轮到4.5

4

6 回答 6

14

您可以(ab)使用整数除法截断并且不四舍五入的事实:

float original = 4.48;

int tmp = original * 10; // 44.8 truncated to 44

float truncated = tmp / 10.0; // 4.4
于 2012-10-06T21:27:34.827 回答
6

这是一个简单的方法:

printf("%.1f",trunc(x*10.0)/10.0);
于 2012-10-06T21:27:01.177 回答
3

如果你的编译器支持C99,应该可以trunc()和朋友一起使用:

float f = 4.56f;
f = truncf(f * 10.0) / 10.0;
于 2012-10-06T21:32:56.630 回答
1

这应该工作

double d = 4.48;
d *= 10.;
int i = d;
d = (double) i / 10.; 
于 2012-10-06T21:27:30.053 回答
0
float myval = 4.48;
float tr = ((int)(myval*10)) / 10.0;
于 2012-10-06T21:28:35.667 回答
-3

我看到您正在使用格式说明符,这是我从脚本语言中熟悉的格式说明符。如果您使用的那个有效,那么我会假设其余的这些也有效。

我正在考虑的语言使用相同的说明符来提供多种功能。

如果你使用 "%0.4f" 3.14159 变成 ".1415"

如果您使用“%2.1f”,则它变为“03.1”

如果你使用 "%1.2f 你会得到 "3.14"

于 2021-07-28T19:20:31.803 回答