Разница между форматированием чисел / плавающими точками в php и c ++ - PullRequest
0 голосов
/ 06 января 2019

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

Я привык к 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 Ответ

0 голосов
/ 06 января 2019

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