module Zakuro::Calculation::Lunar::ChoukeiValue
ChoukeiValue
再考長慶宣明暦算法
Public Class Methods
remainder_without_second(remainder:)
click to toggle source
秒がない大余小余にする
@param [Cycle::LunarRemainder] remainder 大余小余
@note 815年で大余繰り上げあり
@return [Integer] 大余 @return [Float] 小余
# File lib/zakuro/calculation/stella/lunar/choukei_value.rb, line 43 def self.remainder_without_second(remainder:) adjusted = remainder.class.new( day: remainder.day, minute: remainder.floor_minute, second: 0 ) adjusted.carry! [adjusted.day, adjusted.minute] end
rounded_day(per:, denominator:, minute:)
click to toggle source
四捨五入した大余を返す
@param [Integer] per 増減率 @param [Integer] denominator 小余の分母 @param [Integer] minute 小余
@return [Integer] 累計値(大余)
# File lib/zakuro/calculation/stella/lunar/choukei_value.rb, line 24 def self.rounded_day(per:, denominator:, minute:) remainder_minute = Type::OldFloat.new((per * minute).to_f) day = day_only(remainder_minute: remainder_minute.get, denominator: denominator) # 繰り上げ結果を足す day += carried_minute(remainder_minute: remainder_minute, denominator: denominator) day end
Private Class Methods
carried_minute(remainder_minute:, denominator:)
click to toggle source
# File lib/zakuro/calculation/stella/lunar/choukei_value.rb, line 60 def self.carried_minute(remainder_minute:, denominator:) remainder_day = remainder_minute.abs % denominator # 四捨五入(1/2日 以上なら繰り上げる) return remainder_minute.sign if remainder_day >= (denominator / 2) 0 end
day_only(remainder_minute:, denominator:)
click to toggle source
# File lib/zakuro/calculation/stella/lunar/choukei_value.rb, line 52 def self.day_only(remainder_minute:, denominator:) float_day = Type::OldFloat.new(remainder_minute / denominator) # 切り捨て(プラスマイナスに関わらず小数点以下切り捨て) float_day.floor! float_day.get end