如何解决我的转换类型问题?最后的密码是四舍五入的
How to solve my conversion type problem? The last cipher are rounded
我遇到了这个问题:
x_1 是一个具有此值的整数:
x_1: 463606075
我要得到的是46.3606075
,也就是同一个数除以10000000
。
如果我将我的 int x_1 转换为 double,我得到:
x_1: 463606075.000000
现在,如果我除以 10000000(即 10^7),最后的密码将四舍五入:
x_1: 46.360608
,这不是 46.3606075(...075 四舍五入为 ...08)。我不想要任何类型的认可。我怎么解决这个问题?谢谢大家的帮助!
最后一位小数显示为四舍五入,因为您很可能只打印前 6 位小数(这是 printf
的 %f
格式说明符的默认精度)。
此外,请不要忘记浮点类型不能准确表示每个值(参见 this post 示例)。你的 double 的确切值是 46.3606075000000004138200893066823482513427734375
。您可以使用以下内容轻松地为自己测试:
#include <stdio.h>
int main(void){
int x = 463606075;
double y = (double) x / 10000000.0;
printf("%.100f", y);
}
最好 post 整个代码。
您似乎使用了 printf
或 cout
命令来查看 x_1
的值。
如果您使用 printf("%f", x_1);
那么结果必须是 46.360608。
如果你想看到更多的数字,你可以这样使用:
printf ("%.7f", x_1);
我遇到了这个问题: x_1 是一个具有此值的整数:
x_1: 463606075
我要得到的是46.3606075
,也就是同一个数除以10000000
。
如果我将我的 int x_1 转换为 double,我得到:
x_1: 463606075.000000
现在,如果我除以 10000000(即 10^7),最后的密码将四舍五入:
x_1: 46.360608
,这不是 46.3606075(...075 四舍五入为 ...08)。我不想要任何类型的认可。我怎么解决这个问题?谢谢大家的帮助!
最后一位小数显示为四舍五入,因为您很可能只打印前 6 位小数(这是 printf
的 %f
格式说明符的默认精度)。
此外,请不要忘记浮点类型不能准确表示每个值(参见 this post 示例)。你的 double 的确切值是 46.3606075000000004138200893066823482513427734375
。您可以使用以下内容轻松地为自己测试:
#include <stdio.h>
int main(void){
int x = 463606075;
double y = (double) x / 10000000.0;
printf("%.100f", y);
}
最好 post 整个代码。
您似乎使用了 printf
或 cout
命令来查看 x_1
的值。
如果您使用 printf("%f", x_1);
那么结果必须是 46.360608。
如果你想看到更多的数字,你可以这样使用:
printf ("%.7f", x_1);