如何在C中创建一个唯一的十进制数?

How to create one only decimal number in C?

我有一个问题:我需要将 3 个双数连接成一个唯一的双数。例如,我有:

a = 40.000000;
b = 56.000000;
c = 10.236330;

我需要以下号码:40.5610236330。整数部分由a的前两位密码定义,前两位十进制密码为b的整数部分,其余十进制密码均为c的密码。我试过:

k = a+(b/100)+(c/1000);

但由于近似误差,结果为40.570236。你可以帮帮我吗?非常感谢!

浮点计算总是会降低一些精度。

但是 40.570236 而不是 40.5610236330 太离谱了。

您看到的大错误是因为您的代码中存在一个简单的错误。

你需要k = a+(b/100)+(c/10000);(即c除以10000)

也许你这样做会更清楚k = a+(b/100)+(c/100/100);

但永远不要指望浮点计算能 100% 精确。甚至不确定数字 40.5610236330 是否可以用 float/double

表示

此外,他们自己的输入值可能不精确:

double c = 10.236330;
printf("%.20f\n", c);

输出:

10.23633000000000059515

double 变量的精度足以存储 12 位有效数字(尽管您的问题并未真正说明 c 有多少位)。

double k= a + b * 0.01 + c * 0.0001;

会起作用。但是显示的时候一定要使用小数点后10位的格式(%.10f),这样四舍五入才能恢复正确的小数位。