【发布时间】:2022-09-26 16:00:09
【问题描述】:
我正在尝试将一些 JavaScript 代码转换为 C++ 以获得具有 17 位精度的 Julian 日期时间。 JS 代码能够给我这个精度,但它在 C++ 中的类似代码给出的值不超过 7 位。这 17 位精度是绝对需要的,因为它有助于以更高的精度实时查找天体的高度和方位角。
这是JS代码。
function JulianDateFromUnixTime(t){
//Not valid for dates before Oct 15, 1582
return (t / 86400000) + 2440587.5;
}
function setJDToNow(){
const date=new Date();
const jd=JulianDateFromUnixTime(date.getTime());
document.getElementById(\"jd\").value=jd;
}
在 HTML 代码中调用它,如下所示
<tr><td align=right>Julian Date:</td><td><input type=text id=\"jd\" value=\"2459349.210248739\"></td><td><input type=button value=\"Now\" onclick=\'setJDToNow();\'></td></tr> 给出值 2459349.210248739
这是C++代码
#include <chrono>
#include <cstdint>
#include <iostream>
uint64_t timeSinceEpochMillisec() {
using namespace std::chrono;
return duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
}
uint64_t JulianDateFromUnixTime(uint64_t t){
//Not valid for dates before Oct 15, 1582
return (t / 86400000) + 2440587.5;
}
int main() {
std::cout << JulianDateFromUnixTime(timeSinceEpochMillisec()) << std::endl;
return 0;
}
这给出了2459848 作为值。
问题:如何获得 17 位精度?
注意:我使用的 GCC 版本是 MSYS2-MINGW-64 GCC 12.1.0
-
uint64_t不是浮点类型。您应该改用double并查看std::setprecision 和std::fixed 以帮助在打印时格式化数字。
标签: c++ c++14 chrono julian-date