在Ruby中,这个十年的第一年轮到了第一年

时间:2013-02-03 21:51:51

标签: ruby-on-rails ruby date

在Rails中,我在实例变量中保存了一个日期。我需要抓住它之前十年的开始。如果@date.year= 1968,那么我需要返回1960。我该怎么做?

3 个答案:

答案 0 :(得分:6)

你可以通过以下几种方式做到这一点。如建议的那样,您始终可以使用整数除法来划分数字并截断余数。因此1968/10会返回196,如果您将其乘以10,它会给您1960。或者简单地说,

@date.year = @date.year/10 * 10
@date.year 
=> 1960

我更喜欢使用模运算的方法。如果您执行@date.year % 10,如果除以10,则会返回剩余部分,然后您可以将其从年份中减去:

@date.year = @date.year - (@date.year % 10)
@date.year 
=> 1960

我更喜欢后者的原因是因为截断余数的整数除法可能不是每个看你的代码的人都很明显的事情。但是,模块化算法在所有编程语言中的工作方式基本相同。

请注意,如果您尝试更改日期,则需要使用相应的method

@date.change(:year => 1960)

答案 1 :(得分:3)

只需对整数进行除法和乘法运算:尝试@date.year/10*10

答案 2 :(得分:2)

将整数除以10,然后乘以10.

1.9.3-p286 :001 > 1855/10
 => 185 
1.9.3-p286 :002 > 185 * 10
 => 1850 

这种工作原理(在Ruby中,在C / C ++,Python中,可能还有许多其他语言中)是整数除法总是截断余数。但是,如果要除以浮点,则不会出现这种情况。