php和c++中numberformatting/floating点的区别

The difference between number formatting/floating points in php and c++

也许标题不是它应该的,或者可能是重复的,但无论哪种方式,我都被困住了,无法在这里或其他任何地方找到正确的答案。

我习惯了php,最近开始学习c++。

我需要转换通过 julian date/time 循环的 php 循环。在 php 这很容易。

在 php 中,我只是用 julian date/time 创建了一个变量,然后开始用十进制数循环。一个例子:

<?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++ 中编译和 运行s。

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

但是我需要一个和原来一样的号码。那么我缺少什么,我不明白什么,最重要的是如何恢复数字格式,就像我插入双精度的原始 julian date/time 数字一样?我需要像 2445874.74375 这样的 jd 以其原始格式出现才能使另一个功能起作用。那么我怎样才能让这个循环工作, 喜欢它在 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");
}