将十进制数转换为几周和几天?

如何将小数转换为数周和数天?

例如,取这个号码: 12.4893617021277

12是月数。 然后.4893617021277将是几周和几天。

所以我希望输出类似于: 12 months, 1 week and 6 days

为了澄清,我不是在寻找确切的数字。 我假设一个月有4个星期,一个星期有7天。

 original = 12.4893617021277 4 weeks × .489361702127658 = 1.9574468085 weeks # That gives me 1 full week, with the remainder going in to the number of days 7 days in a week × .9574468085 = 6.7021276595 days 

最终翻译= 12 months, 1 week and 6 days

我正在运行Ruby 2.1.2并运行Rails 4(如果有一些我不知道的随机帮助器)。

另一个解决方案,很清楚。

 def integer_and_decimal_part(float) integer = float.to_i decimal = float - float.to_i [integer, decimal] end def calculate(float) months, months_decimal = integer_and_decimal_part(float) weeks, weeks_decimal = integer_and_decimal_part(4*(months_decimal)) days = (7*weeks_decimal).to_i {months: months, weeks: weeks, days: days} end calculate(12.4893617021277) => {:months=>12, :weeks=>1, :days=>6} 

我没有得到12个月,1周和6天 – 30 * .4893617即将到来14.6天所以这将是2周,对吗? 我的解决方案不是最漂亮的,但它确实有效。

 def num_to_date(val) results = {} results[:month] = val.to_i remain = val % val.to_i days = remain * 30 #30 days in a month if days > 7 results[:weeks] = days.to_i / 7 rem = days % days.to_i rem < 0 ? results[:days] = 0 : results[:days] = rem.to_i else results[:weeks] = 0 results[:days] = days end results end num = 12.4893617021277 puts num_to_date(num) 

输出:

 {:month=>12, :weeks=>2, :days=>0}