【问题标题】:The difference between number formatting/floating points in php and c++php和c++中数字格式/浮点数的区别
【发布时间】:2019-01-06 11:54:32
【问题描述】:

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

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

我需要转换一个通过朱利安日期/时间循环的 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 中它似乎不太重要。但无论哪种方式,我都不明白。我读过关于整数、浮点数、双精度数、字符和字符串等的文章。但是我研究得越多,它对我来说就越复杂......

【问题讨论】:

标签: php c++ points floating


【解决方案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");
}

【讨论】:

  • 啊太棒了!,这就像它应该的那样工作。所以数字保持不变,但格式会发生变化。
猜你喜欢
  • 2010-11-06
  • 2011-03-20
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
相关资源
最近更新 更多