Разница между форматированием чисел / плавающими точками в php и c ++

Возможно, название не то, что должно, или, возможно, его дубликат, но в любом случае я застрял и не смог найти правильный ответ здесь или где-либо еще.

Я привык к 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 он кажется менее важным. Но в любом случае, я не понимаю. Я читал о целых числах, числах с плавающей запятой, двойных числах, символах и строках и т. Д. Но чем больше я смотрю на это, тем сложнее становится для меня …

-1

Решение

Я был весьма удивлен результатом сам. По-видимому, выходы 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");
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]