C++ 除法后如何对数字进行四舍五入(10.25到11)?
对于学校项目,我需要计算闰年。问题是,我需要舍入整数 例如,有人出生于1961年C++ 除法后如何对数字进行四舍五入(10.25到11)?,c++,floating-point,rounding,c++20,C++,Floating Point,Rounding,C++20,对于学校项目,我需要计算闰年。问题是,我需要舍入整数 例如,有人出生于1961年 double yearsbetween; yearsbetween = birthyear - 1918; double leapyears; leapyears = ( yearsbetween / 4 ); 如果生日=1961年,我得到的闰年=10.75,但那是错误的。。我需要11岁 如果答案是10.25,则需要四舍五入到10。如果答案是10.75,则需要四舍五入到11 有人能帮我吗?看来你需要的是 我建议
double yearsbetween; yearsbetween = birthyear - 1918;
double leapyears; leapyears = ( yearsbetween / 4 );
如果生日=1961年,我得到的闰年=10.75,但那是错误的。。我需要11岁
如果答案是10.25,则需要四舍五入到10。如果答案是10.75,则需要四舍五入到11
有人能帮我吗?看来你需要的是 我建议您在std::ceil引用中还有一个指向其他舍入函数的链接
也会经历这些 你必须特别注意每一年来检查闰年。您将每四年作为闰年的假设是错误的,因为有一些例外: 如果它可以被100整除,也不能被400整除,那么它就不是闰年 示例: 1900年不是闰年 2000年是闰年
请看假设我们只在闰年是那些年的时期工作,并且只有那些年可以被四整除 给定一个数n,小于或等于n的正数是4的倍数为floorn/4。设Ln为该值,floorn/4 如果我们取一个数m,四到m的正倍数是Lm。当我们减去Ln,结果是Lm−Ln,是大于n但小于或等于m的四的倍数 因此,1918年和m年之间的闰年数为floorm/4− 地板1918/4=地板/4− 479如果基准年是闰年,我们想把它包括在周期内,而不是在周期外,我们可以用Ln代替Ln−一, 上述情况很容易扩展到更大的闰年模式。通过将Ln更改为地板/4− floorn/100+floorn/400,它变成了一个正数计数,最大n是4的倍数,但不是100的倍数,除非它们是400的倍数。然后是Lm− Ln是n和m之间的跳跃规则数
因此,适用于本条规则所涵盖期间的适当公式为floorn/4− 地板/100+地板/400− 464使用C的整数算法,这很容易被计算为n/4-n/100+n/400-464。所以这在之前是不相关的,我甚至不得不弄清楚如何使用它。但最好的解决方案(如果可用)是:
const chrono::year birthyear{ 1961 };
auto leapyears = 0;
for(chrono::year i{ 1918 }; i <= birthyear; ++i) {
if(i.is_leap()) {
++leapyears;
}
}
我已经通过forking的例子链接了。你能展示一下你是如何计算闰年的吗?你根本不需要四舍五入。为什么在处理整型值(如年份)时使用浮点数?11/4实际上是2.75,而不是10.75。我想你的意思是1961-1918/4=10.75。编程需要精确,就像数学一样!我认为你不能用算术公式来确定闰年的数量。我认为您需要从第一年迭代到最后一年,并计算闰年。std::ceil将为您做这件事。虽然这回答了字面上的问题,但并没有指出OP的公式有缺陷,会为某些日期范围添加额外的闰年。这是真的,我只回答了字面上的问题。我的错在那里。