以秒计算年龄——奇怪的结果
Calculate age in seconds - strange result
我是编程新手,也是这里的新手。很抱歉问了这个愚蠢的问题,但我对"用秒计算你的年龄"代码中的结果有问题。它给了我一个奇怪的结果,比如6.17725e+10或-6.77414e+10。程序还没有完成,但除了结果外,一切看起来都很好(我没有得到任何错误。再次抱歉,我希望你能理解:)
#include <iostream>
using namespace std;
void title()
{
cout << "Age Calculator" << endl << endl;
}
int byear()
{
cout << "Enter your birth year: ";
int by;
cin >> by;
return by;
}
int bmonth()
{
cout << "Enter your birth month: ";
int bm;
cin >> bm;
return bm;
}
int bday()
{
cout << "Enter your birth day: ";
int bd;
cin >> bd;
return bd;
}
int cyear()
{
int cy;
cout << "Enter current year ";
cin >> cy;
return cy;
}
int cmonth()
{
cout << "Enter current month: ";
int cm;
cin >> cm;
return cm;
}
int cday()
{
cout << "Enter current day: ";
int cd;
cin >> cd;
return cd;
}
void calculate(int by, int bm, int bd, int cy)
{
double y = 31104000;
long double cby = y * by;
long double cbm = 259200 * bm;
long double cbd = 8640 * bd;
long double ccy = 31104000 * cy;
cout << endl << cby << endl;
cout << endl << ccy << endl;
cout << endl << ccy - cby << endl;
}
int main()
{
title();
int by = byear();
int bm = bmonth();
int bd = bday();
int cy = cyear();
int cm = cmonth();
int cd = cday();
calculate(by, bm, bd, cy);
cin.get();
return 0;
}
正如Kenny Ostrom所评论的,由于cout使用的科学符号,所显示的值可能看起来很奇怪。要显示所有数字,可以使用cout.precision(your_precision_here)
更改cout的精度。请参阅下面的问题。
如何使用cout以全精度打印双值?
首先,您所混淆的数字格式是"科学记数法"。这些信息足以打开谷歌搜索的世界,或者你可以强迫它不要用科学符号打印。
其次,您真的想使用时间库来处理任何日历内容。它将为你处理各种日历的怪异,包括闰年。幸运的是我们有时间。h
第三,我建议使用整数类型表示秒,部分原因是为了避免舍入错误和难看的小数,但主要是因为time.h就是这样使用的。只要确保它足够大。我的编译器使用64位整数表示time_t,所以我使用了:
#include <time.h>
#include <memory>
time_t get_age_in_seconds(int year, int month, int day)
{
struct tm birthday;
memset(&birthday, 0, sizeof(birthday));
birthday.tm_year = year - 1900; // years since 1900
birthday.tm_mon = month - 1; // months since January (0,11)
birthday.tm_mday = day; // day of the month (1,31)
time_t birthday_in_seconds = mktime(&birthday);
time_t now = time(NULL);
return now - birthday_in_seconds;
}
不要使用替身进行计算。你不会有任何分数值,因为你没有做任何除法。
更重要的是,研究mktime()
、time()
和difftime()
。你应该用这些来计算。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 计算幂级数的数学结果不正确
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 在Javascript和C++中计算MD5哈希的不同结果
- 为什么 Lisp 中 1000 阶乘的计算如此之快(并显示正确的结果)?
- 我们如何并行运行算法的 n 个实例并以有效的方式计算结果函数的平均值?
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- WebGL2 和 C++ 上的浮点计算结果不同
- 术语的计算结果不是采用0个参数的函数
- C++编译器能在编译时计算出文字的除法结果吗
- 错误 C2064:术语的计算结果不是采用 3 个参数的函数
- 在C++中,是否可以编写一个条件的lambda,即只是一个计算结果为真或假的条件
- C++ 函数指针的计算结果为 1
- 为什么 02000 的计算结果为 1024
- 为什么这两个相似的代码计算行列式的结果不同?
- C++ openmp 并行计算计算错误的结果
- 如何让编译器忽略这个计算结果为 false 的 if-constexpr?
- 从文本文件中读取并使用 sizeof 结果计算整数的数量到 nan