我想使用boost::format
以以下格式获取以分钟为单位接收的某个UTC偏移量:
120: +0200
-120: -0200
我使用了以下函数:
void printData(const int dat)
{
std::string data;
if (dat >= 0)
{
data = (boost::format("+%02d%02d") % (dat/60) % (dat%60)).str();
}
else
{
data = (boost::format("%03d%02d") % (dat/60) % (dat%60)).str();
}
std::cout<<" " << data << "\n";
}
它应该适用于以下情况:
// 1: 0-10 (+, -)
// 1.1 fix hour
std::cout<<"1:\n";
std::cout<<"1.1:\n";
printData(540); // +9 hours -> OK (+0900)
printData(-540); // -9 hours -> OK (-0900)
printData(600); // +10 hours -> OK (+1000)
printData(-600); // -10 hours -> OK (-1000)
// 1.2 half hour
std::cout<<"1.2:\n";
printData(570); // +9:30 hours -> OK (+0930)
printData(-570); // -9:30 hours -> NOK -> (-09-30) // -0930 should be
// 1.3 three quarte an hour
std::cout<<"1.3:\n";
printData(585); // +9:40 hours -> OK (+0945)
printData(-585); // -9:45 hours -> NOK -> (-09-40) // -0945 should be
std::cout<<"\n";
std::cout<<"\n2:\n";
// 2: 11-14 (+, -):
// 2.1 fix hour
std::cout<<"2.1:\n";
printData(660); // +11 hours -> OK (+1100)
printData(-660); // -11 hours -> OK (-1100)
// 2.2 half hour
std::cout<<"2.2:\n";
printData(690); // +11:30 hours -> OK (+1130)
printData(-690); // -11:30 hours -> NOK -> (-11-30) // -1130 should be
// 2.3 three quarte an hour
std::cout<<"2.3:\n";
printData(705); // +11:45 hours -> OK (+1145)
printData(-705); // -11:45 hours -> NOK -> (-11-45) // -1145 should be
std::cout<<"\n";
是否可以使用boost::format
来支持所有情况?https://godbolt.org/z/5Mfs5Yh6z
2条答案
按热度按时间i2byvkas1#
你可以使用一个临时变量来表示符号,当
dat
为负时取反。所以,你可以在两种情况下使用相同的boost::format
行(减少重复代码):https://godbolt.org/z/7YPbejsj3
更简单的方法是使用
iostream
中的std::printf
,它与C版本的语法相同:https://godbolt.org/z/Ea76P5srs
6l7fqoea2#
您可以对输入求反并使用它进行格式化。