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");
}
也许标题不是它应该的,或者可能是重复的,但无论哪种方式,我都被困住了,无法在这里或其他任何地方找到正确的答案。
我习惯了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");
}