将时间输入转换为浮点数以启用C++中的数学函数
Convert time input to a float to enable math functions in C++
我要求用户以这种格式输入开始时间和结束时间:15.45(军事时间,用小数而不是冒号(,我需要将这些时间转换为浮点数以对它们执行计算。 我很难将一小时的 60 分钟转换为十进制值。 例如 - 用户输入的开始为 12.45 和结束于 14.15,这应分别转换为 12.75 和 14.25。 我将如何进行此转换?
另外,我相信我更有能力弄清楚,但无论如何都很好奇:我将如何验证输入,以免允许时间大于 23.59 并且不允许最后两位数大于 59 的时间?
只要其中一个值被double
,那么算术将是在double
年完成,结果double
。 因此,您可以转换 minutes
double
,使用三种C++语法中的任何一种: static_cast<double>(minutes)
, double(minutes)
或 (double)minutes
,或者只是除以 60.0
,而不是整数60
。 (我喜欢成为明确,所以我会写double(minutes) / 60.0
. 有些人更喜欢 static_cast
,即使在这种情况下。
关于验证,我会在转换之前进行; 一旦你将分钟加到小时,反正为时已晚。
只需使用
double time = hours + minutes / 60.0;
bool hoursValid = hours < 24; // hours are unsigned, right?
bool minutesValid = minutes < 60;
例:
char buf[] = "9.45";
unsigned int hours, minutes;
sscanf(buf, "%d.%d", &hours, &minutes);
printf("%f", hours + minutes/60.0); // outputs 9.75
如果输入double
9.45,则需要#include <cmath>
并将其拆分为
hours = floor(v);
minutes = (v - hours) * 100;
您必须将数字的整数和小数部分分开。您将保持整数部分不变,然后将小数部分除以 60 添加到其中。
一旦您分为小时和分钟,验证也很简单。
我将假设您的代码将用户的值作为字符串读取。 您需要在小数点处解析用户输入,以将小时和分钟作为两个单独的值。 一旦有了它,您就可以将分钟转换为一小时的几分之一,并将其添加到小时数中。
bool military_time_valid(float a) {
int t = (int)a;
if (t >= 24)
throw std::runtime_error("invalid hours");
if (a-t >= .6)
throw std::runtime_error("invalid minutes");
}
float military_to_decimal(float a) {
int t = (int)a;
return t + (a-t)/.6;
}
float decimal_to_military(float a) {
int t = (int)a;
return t + (a-t)*.6;
}
float t = 15.45;
int h = (int) t;
float m = 100 * (t - h);
printf("%f", h + m / 60);
给出输出:15.750000
检查h
是否在 0
和 23
之间,m
是否在 0
和 59
之间。
理由不想创建MilTime
类并重载算术运算符? 这将使您不必一直转换,并且可以更清楚地说明您的意图。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗