为什么我的花车坚持要保持整数?

时间:2012-02-24 22:04:06

标签: c++ floating-point

我正在读几个整数,代表年份,朱利安日,小时和分钟。我试图将它们转换为分数天。

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解决了这个问题,谢谢。

5 个答案:

答案 0 :(得分:3)

问题不在您的号码或计算中。它只是在你显示它的方式。 cout已经确定6位数就足够了。如果您需要更多内容,请使用setprecision

std::cout << std::setprecision(10) << datenumber;

demo

答案 1 :(得分:1)

你需要做两个的事情:

  1. 将精度设置为最大值(cout.setprecision(16)
  2. 转换为doubledouble dateNumberYYYY*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作为浮点数,看看你的输出是什么