繁体   English   中英

PHP和C ++中数字格式/浮点数之间的区别

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

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

我曾经使用过php,最近开始学习c ++。

我需要转换一个通过julian日期/时间循环的php循环。 在php中,这非常容易。

在php中,我只是用julian日期/时间创建一个变量,然后开始使用十进制数字循环。 一个例子:

<?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中似乎不太重要。 但是无论哪种方式,我都不明白。 我已经读过有关整数,浮点数,双精度数,字符和字符串等的信息。但是我研究的越多,它对我来说就越复杂...

我自己对结果感到非常惊讶。 显然,默认情况下,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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM