我正在读几个整数,代表年份,朱利安日,小时和分钟。我试图将它们转换为分数天。
int YYYY, JJJ, HH, MM;
float datenumber = (YYYY*360.0f)+(JJJ*1.0f)+((HH*1.0f)+(MM/60.0f))/24.0f;
使用2001, 083, 22, 32
的值我应得到724043.939
的结果。相反,我得到724044
。
我把所有的投注作为花车。为什么它们保持整数?
编辑是的,我正在用cout显示输出。 setprecision解决了这个问题,谢谢。
答案 0 :(得分:3)
问题不在您的号码或计算中。它只是在你显示它的方式。 cout
已经确定6位数就足够了。如果您需要更多内容,请使用setprecision
。
std::cout << std::setprecision(10) << datenumber;
答案 1 :(得分:1)
你需要做两个的事情:
cout.setprecision(16)
)double
(double dateNumber
和YYYY*360.0
)答案 2 :(得分:0)
除非你有更多的代码可以在其他地方进行投射,否则你在完成等式之后就会进行投射,所以你得到一个回弹,但是在投射之前使用等式中的int小数。
为什么不最初将它们声明为浮动?
float YYYY, JJJ, HH, MM;
答案 3 :(得分:0)
以下可能是以下原因─ 你可能错误地打印它们。 2.除以整数,改为使用float。
示例 - 而不是除以200除以200.0
答案 4 :(得分:0)
根据您在本杰明答案中提供的示例中的输入和输出值判断,我愿意打赌这个问题只是浮点精度。仅仅因为你将某些东西声明为浮点数,并不意味着它可以处理任何大小的数字。问题在于您的年份组件(1200 * 360 = 432000)比您的MM组件(5/60/24 = .00347222)大。 MM部分的小数部分被忽略,因为浮点数不准确。尝试将.000001添加到123456789作为浮点数,看看你的输出是什么