繁体   English   中英

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

[英]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;

演示

你需要做件事:

  1. 将精度设置为最大值( cout.setprecision(16)
  2. 转换为doubledouble dateNumberYYYY*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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM