[英]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.