也许标题不是应该的,或者标题是重复的,但是无论哪种方式,我都被卡住了,无法在此处或其他地方找到正确的答案。
我曾经学习过php,最近开始学习c ++。
我需要转换一个通过朱利安日期/时间循环的php循环。在php中,这非常容易。
在php中,我只创建一个带有朱利安日期/时间的变量,然后开始使用十进制数字循环。一个例子:
<?php
$jd = 2445874.74375;
for($x=0; $x<=300; $x++) {
echo "new jd = ". $jd;
$jd = $jd + 0.5; // half a day
}
?>
然后得出以下数字序列
jd = 2445874.74375
jd = 2445875.24375
jd = 2445875.74375
jd = 2445876.24375
jd = 2445876.74375
jd = 2445877.24375
jd = 2445877.74375
jd = 2445878.24375
jd = 2445878.74375
我是c ++的新手,所以我只是尝试复制相同的内容,但是更改了语法,以便它可以在C ++中编译并运行。
int main() {
double jd = 2445874.74375; // I figured i need a double here?
for(int i = 0; i <= 300; i+=1) {
cout << jd << endl;
jd = jd + 0.5;
}
}
但是当我运行代码时,结果显示的总数与我期望的总数不同。根据我的理解和阅读,该数字并没有真正改变,但是格式不同...输出看起来像这样->
2.44587e+06
2.44588e+06
2.44588e+06
2.44588e+06
2.44588e+06
...
2.44589e+06
但是我需要一个像原始号码一样的号码。那么,我想念的是什么,我不了解什么,最重要的是,如何恢复数字格式,就像我插入双打的原始朱利安日期/时间编号一样?我需要像2445874.74375这样的jd以其原始格式显示才能使其他功能正常工作。所以我如何使这个循环起作用, 像它在PHP工作?我已经注意到在C ++中定义变量的正确方法似乎非常重要,而在php中似乎不太重要。但是无论哪种方式,我都不明白。我已经读过有关整数,浮点数,双精度数,字符和字符串等的信息。但是,我对它的研究越多,它对我来说就越复杂...
答案 0 :(得分:3)
我自己对结果感到非常惊讶。显然,默认情况下,cout输出以科学计数法加倍。使用std :: fixed流操纵器应对其进行修复。
int main()
{
double jd = 2445874.74375; // I figured i need a double here?
for (int i = 0; i <= 300; i += 1) {
std::cout << std::fixed << jd << std::endl;
jd = jd + 0.5;
}
system("pause");
}