如何将浮点数切换为时间格式
How can you switch a float to a time format?
你好,我是初学者,所以请善待:)..
在C++中,如果我有一个像 12.5 或 13.25 这样的浮点数,我怎样才能将其转换为显示为 12:30 和 13:15?
非常感谢。
float time = ...;
将浮点数转换为整数将砍掉小数部分,留给您时间。
int hour = static_cast<int>(time);
如果你减去小时,那么剩下的就是分钟作为一小时的几分之一。 如果将其乘以 60,则在几分钟内得到余数。 再次,投射到一个 int 来砍掉秒数,只剩下几分钟。
int minute = static_cast<int>((time-hour)*60);
然后显示小时和冒号。 要正确显示分钟,请告诉它始终使用 2 个字符的宽度,并用"0"填充空白。 这使得它说02
而不仅仅是2
。
std::cout << hour << ':' << std::setw(2) << std::fill('0') << minute;
与任何问题一样,您需要将其分解为多个组成部分并分别攻击每个组成部分。
您拥有的:
- 浮点小时数。
您需要什么:
- 打印整数小时数。
- 打印":"
- 将小时数按 60 分钟的比例打印。
所以,现在,我们可以解决问题的每个部分。
假设输入为:
const float time = 13.25;
第一部分非常简单 — 截断浮点变量可以使用数学floor
函数来完成,但您真正需要做的就是转换为 int
以获得相同的效果:
std::cout << (unsigned int)time;
第二部分也非常简单:
std::cout << ':';
第三部分需要做更多的工作。我们需要丢弃除小数部分以外的所有内容。我们可以通过减去整数部分来做到这一点:
time - (unsigned int)time
然后我们必须转换该值,以便它不是范围 [0.00,1.00) 的比例,而是范围 [0,60) 的比例,只需乘以 60:
60 * (time - (unsigned int)time)
我们只剩下:
const float time = 13.25;
std::cout << (unsigned int)time;
std::cout << ':';
std::cout << 60 * (time - (unsigned int)time);
// result: 13:15
(现场演示)
对于一般解决方案,如果只有一个数字,我们还希望显示前导零:
const float time = 12.10;
std::cout << (unsigned int)time;
std::cout << ':';
std::cout << std::setw(2) << std::setfill('0');
std::cout << 60 * ((time - (unsigned int)time) / 100);
// result: 12:06
实际上,为了避免舍入错误和可能的溢出,您可以完全删除float
并简单地存储整数分钟数:
const unsigned int time_mins = (12*60) + 6;
std::cout << (time_mins / 60);
std::cout << ':';
std::cout << std::setw(2) << std::setfill('0');
std::cout << (time_mins % 60);
// result: 12:06
(现场演示)
或者,你知道,使用实际的时间/日期类型。
相关文章:
- C++20 标准::时间::d格式的缺点
- 有没有办法使用 Boost 获取区域时间格式?
- 这种日期和时间格式是什么?
- 标准::get_time 中的日期时间格式
- 如何在 NetBeans 模板中更改时间格式
- 升压C 的时期时间/时间格式
- C Unixtimestamp和可读的时间格式
- 语言环境"en_US"中 std::time_get::get_time() 的正确时间格式是什么?
- 如何将存储在字符串变量中的时间转换为时间格式
- 如何将EPOCH时间转换为时间格式(hh:mm)
- 使用C++将任何形式的日期-时间字符串格式更改为美国日期-时间格式
- 如何将浮点数切换为时间格式
- boost::chrono::system_clock - 如何将当前时间格式化为字符串
- 时间格式 HH:MM:SS 输入
- 用C++设置带有小数秒的日期和时间格式
- c++检查有效的日期时间格式
- 将整数转换为时间格式
- c++中的数据和时间格式
- 如何在C++中将日期时间格式从yyyy-MM-dd转换为yyyy/MM/dd
- 使用c++中的strptime将字符串转换为特定的日期时间格式