如何在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
),这样四舍五入才能恢复正确的小数位。
我有一个问题:我需要将 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
),这样四舍五入才能恢复正确的小数位。