C 将4位数年份转换为2位数年份
我想得到一年的最后两位数。例如,如果我以一个输入值“2012”开始,我希望生成一个输出值“12”C 将4位数年份转换为2位数年份,c,C,我想得到一年的最后两位数。例如,如果我以一个输入值“2012”开始,我希望生成一个输出值“12” 在fprintf中是否有只打印最后两位数字的选项?只需打印模数为100的数字: printf("%2d\n", 2012 % 100); 将打印12只需打印以100为单位的数字: printf("%2d\n", 2012 % 100); 将打印12Steve314想法(现已删除)很好,但未正确呈现。示例:如果年份是2009年,则使用“%2d”获取“09”是不正确的。“%2d”将得到“9”。“%0
在
fprintf
中是否有只打印最后两位数字的选项?只需打印模数为100的数字:
printf("%2d\n", 2012 % 100);
将打印
12
只需打印以100为单位的数字:
printf("%2d\n", 2012 % 100);
将打印12
Steve314想法(现已删除)很好,但未正确呈现。示例:如果年份是2009年,则使用“%2d”获取“09”是不正确的。“%2d”将得到“9”。“%02d”将为您提供“09”
此外,还存在负数问题d、 (-99)的%2d、%02d都将产生一个3个字符的答案。如果已知年份未签名,建议使用“u”而不是“d”。如果签署的年份可能是负数,您可能需要为这种深奥的情况编写额外的代码。Steve314 idea(现已删除)很好,但没有正确呈现。示例:如果年份是2009年,则使用“%2d”获取“09”是不正确的。“%2d”将得到“9”。“%02d”将为您提供“09”
此外,还存在负数问题d、 (-99)的%2d、%02d都将产生一个3个字符的答案。如果已知年份未签名,建议使用“u”而不是“d”。如果签名年份可能是负数,您可能需要额外的代码来处理这种深奥的情况。或者,在Fortran中,为了反驳OP的说法,即在Fortran中,我们不能以所需格式写入数字
write(*,'(i2.2)')mod(2012100)
,或者,在Fortran中,为了证明OP的声明,在FORTRAN中,我们不能以期望的格式写代码:代码>写(*,‘(i2.2))mod(2012100)< /代码>好捕获-我已经使用C++太久了。在有符号整数的%
上,这是一个令人讨厌的问题。在数学中,余数可以是负数(取决于除法的取整方式),但模不能。我们有一个操作员,它不决定它在做什么工作——一个平台可能总是给出非负面结果,也可能不会。Ada有两个操作符-mod
和rem
,虽然我一直记得它,但它不是唯一一个这样做的操作符。%2d
将为您提供2012
,而不是9
。该数字是一个最小字段宽度,而不是一个限制。@Matt McNabb删除的Steve314注释建议类似于printf(“%2d\n”,年份%100)代码>。我的回答是,如果year
刚好超过了printf中100的倍数(“%2d\n”,2009%100),则处理该案例代码>将打印“9”。通过在格式中添加“0”
,code可以确保在OP请求中获得两位数,而不是最高级别的答案。为了更清晰,更新了答案。代码2中的“%2D”<代码>是一个最小字段宽度,但不是最小位数。好的catch -我已经使用C++太久了。在有符号整数的%
上,这是一个令人讨厌的问题。在数学中,余数可以是负数(取决于除法的取整方式),但模不能。我们有一个操作员,它不决定它在做什么工作——一个平台可能总是给出非负面结果,也可能不会。Ada有两个操作符-mod
和rem
,虽然我一直记得它,但它不是唯一一个这样做的操作符。%2d
将为您提供2012
,而不是9
。该数字是一个最小字段宽度,而不是一个限制。@Matt McNabb删除的Steve314注释建议类似于printf(“%2d\n”,年份%100)代码>。我的回答是,如果year
刚好超过了printf中100的倍数(“%2d\n”,2009%100),则处理该案例代码>将打印“9”。通过在格式中添加“0”
,code可以确保在OP请求中获得两位数,而不是最高级别的答案。为了更清晰,更新了答案。“%2d”
中的2是最小字段宽度,但不是最小位数。