[英]Why does my compiler insist that operator<< has 3 parameters when it has 2?
[英]Why do my floats insist on staying integers?
我正在阅读几个整数,代表年份,朱利安日,小时和分钟。 我试图将它们转换为分数天。
int YYYY, JJJ, HH, MM;
float datenumber = (YYYY*360.0f)+(JJJ*1.0f)+((HH*1.0f)+(MM/60.0f))/24.0f;
使用724043.939
的值2001, 083, 22, 32
我应该得到724043.939
的结果。 相反,我得到724044
。
我把所有的投注作为花车。 为什么他们保持整数?
编辑是的,我正在用cout显示输出。 setprecision解决了这个问题,谢谢。
问题不在于您的号码或计算中。 它只是在你显示它的方式。 cout
决定6位数就足够了。 如果您想要更多,请使用setprecision
。
std::cout << std::setprecision(10) << datenumber;
你需要做两件事:
cout.setprecision(16)
) double
( double dateNumber
和YYYY*360.0
) 除非你有更多的代码可以在其他地方进行投射,否则你在完成等式之后就会进行投射,所以你得到一个浮点数,但是在你的投射之前使用等式中的int来减去小数。
为什么不最初将它们声明为浮动?
float YYYY, JJJ, HH, MM;
以下可能是原因 - 1.可能是你错误地打印它们。 2.除以整数,使用float代替。
示例 - 而不是除以200除以200.0
从本杰明答案中提供的示例中的输入和输出值来判断,我愿意打赌这个问题只是浮点精度。 仅仅因为你将某些东西声明为浮点数,并不意味着它可以处理任何大小的数字。 问题在于您的年份组件(1200 * 360 = 432000)比您的MM组件(5/60/24 = .00347222)大。 MM部分的小数部分被忽略,因为浮点数不准确。 尝试将.000001添加到123456789作为浮点数并查看输出结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.