Возможно, название не то, что должно, или, возможно, его дубликат, но в любом случае я застрял и не смог найти правильный ответ здесь или где-либо еще.
Я привык к 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
Но мне нужен номер как оригинальный. Так что же мне не хватает, что я не понимаю, и самое главное, как можно восстановить форматирование чисел, как исходное юлианское число даты / времени, которое я вставил в двойник? Мне нужно, чтобы jd вроде 2445874.74375 появился в исходном формате, чтобы заставить работать другую функцию. Так как я могу сделать этот цикл работающим,
как работает в php? Я уже заметил, что при определении переменных в C ++ правильный путь кажется очень важным, тогда как в php он кажется менее важным. Но в любом случае, я не понимаю. Я читал о целых числах, числах с плавающей запятой, двойных числах, символах и строках и т. Д. Но чем больше я смотрю на это, тем сложнее становится для меня …
Я был весьма удивлен результатом сам. По-видимому, выходы 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");
}
Других решений пока нет …