本文簡要介紹ruby語言中 BigDecimal.mode
的用法。
用法
mode(mode, setting = nil) → integer
返回一個整數,表示異常處理和舍入的模式設置。
這些模式控製異常處理:
-
BigDecimal::EXCEPTION_NaN。
-
BigDecimal::EXCEPTION_INFINITY。
-
BigDecimal::EXCEPTION_UNDERFLOW。
-
BigDecimal::EXCEPTION_OVERFLOW。
-
BigDecimal::EXCEPTION_ZERODIVIDE。
-
BigDecimal::EXCEPTION_ALL。
用於異常處理的 setting
的值:
-
true
:將給定的mode
設置為true
。 -
false
:將給定的mode
設置為false
。 -
nil
:不修改模式設置。
您可以使用方法 BigDecimal.save_exception_mode
臨時更改,然後自動恢複異常模式。
為清楚起見,下麵的一些示例首先將所有異常模式設置為 false
。
此模式控製要執行舍入的方式:
-
BigDecimal::ROUND_MODE
您可以使用方法 BigDecimal.save_rounding_mode
臨時更改,然後自動恢複舍入模式。
NaNs
模式 BigDecimal::EXCEPTION_NaN 控製創建 BigDecimal NaN 時的行為。
設置:
-
false
(默認):返回BigDecimal('NaN')
。 -
true
:引發FloatDomainError
。
例子:
BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
BigDecimal('NaN') # => NaN
BigDecimal.mode(BigDecimal::EXCEPTION_NaN, true) # => 2
BigDecimal('NaN') # Raises FloatDomainError
無窮大
模式 BigDecimal::EXCEPTION_INFINITY 控製創建 BigDecimal Infinity 或 -Infinity 時的行為。設置:
-
false
(默認):返回BigDecimal('Infinity')
或BigDecimal('-Infinity')
。 -
true
:引發FloatDomainError
。
例子:
BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
BigDecimal('Infinity') # => Infinity
BigDecimal('-Infinity') # => -Infinity
BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, true) # => 1
BigDecimal('Infinity') # Raises FloatDomainError
BigDecimal('-Infinity') # Raises FloatDomainError
下溢
模式 BigDecimal::EXCEPTION_UNDERFLOW 控製發生 BigDecimal 下溢時的行為。設置:
-
false
(默認):返回BigDecimal('0')
或BigDecimal('-Infinity')
。 -
true
:引發FloatDomainError
。
例子:
BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
def flow_under
x = BigDecimal('0.1')
100.times { x *= x }
end
flow_under # => 100
BigDecimal.mode(BigDecimal::EXCEPTION_UNDERFLOW, true) # => 4
flow_under # Raises FloatDomainError
溢出
模式 BigDecimal::EXCEPTION_OVERFLOW 控製發生 BigDecimal 溢出時的行為。設置:
-
false
(默認):返回BigDecimal('Infinity')
或BigDecimal('-Infinity')
。 -
true
:引發FloatDomainError
。
例子:
BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
def flow_over
x = BigDecimal('10')
100.times { x *= x }
end
flow_over # => 100
BigDecimal.mode(BigDecimal::EXCEPTION_OVERFLOW, true) # => 1
flow_over # Raises FloatDomainError
零師
模式 BigDecimal::EXCEPTION_ZERODIVIDE 控製發生 zero-division 時的行為。設置:
-
false
(默認):返回BigDecimal('Infinity')
或BigDecimal('-Infinity')
。 -
true
:引發FloatDomainError
。
例子:
BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
one = BigDecimal('1')
zero = BigDecimal('0')
one / zero # => Infinity
BigDecimal.mode(BigDecimal::EXCEPTION_ZERODIVIDE, true) # => 16
one / zero # Raises FloatDomainError
所有例外
模式 BigDecimal::EXCEPTION_ALL 控製上述所有內容:
BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
BigDecimal.mode(BigDecimal::EXCEPTION_ALL, true) # => 23
四舍五入
模式 BigDecimal::ROUND_MODE 控製進行舍入的方式;其setting
值為:
-
ROUND_UP
:從零舍入。別名為:up
。 -
ROUND_DOWN
:向零舍入。別名為:down
和:truncate
。 -
ROUND_HALF_UP
:向最近的鄰居四舍五入;如果鄰居是等距的,則從零舍入。別名為:half_up
和:default
。 -
ROUND_HALF_DOWN
:向最近的鄰居四舍五入;如果鄰居是等距的,則向零舍入。別名為:half_down
。 -
ROUND_HALF_EVEN
(莊家四舍五入):向最近鄰舍入;如果鄰居是等距的,則向偶數鄰居舍入。別名為:half_even
和:banker
。 -
ROUND_CEILING
:向正無窮大舍入。別名為:ceiling
和:ceil
。 -
ROUND_FLOOR
:向負無窮大舍入。別名為:floor:
。
相關用法
- Ruby BigDecimal.mult用法及代碼示例
- Ruby BigDecimal.self >用法及代碼示例
- Ruby BigDecimal.self >=用法及代碼示例
- Ruby BigDecimal.floor用法及代碼示例
- Ruby BigDecimal.to_s用法及代碼示例
- Ruby BigDecimal.to_d用法及代碼示例
- Ruby BigDecimal.save_rounding_mode用法及代碼示例
- Ruby BigDecimal.to_digits用法及代碼示例
- Ruby BigDecimal.add用法及代碼示例
- Ruby BigDecimal.save_exception_mode用法及代碼示例
- Ruby BigDecimal.ceil用法及代碼示例
- Ruby BigDecimal.scale用法及代碼示例
- Ruby BigDecimal.truncate用法及代碼示例
- Ruby BigDecimal._dump用法及代碼示例
- Ruby BigDecimal.round用法及代碼示例
- Ruby BigDecimal.n_significant_digits用法及代碼示例
- Ruby BigDecimal.inspect用法及代碼示例
- Ruby BigDecimal.double_fig用法及代碼示例
- Ruby BigDecimal.self - value用法及代碼示例
- Ruby BigDecimal.precision用法及代碼示例
- Ruby BigDecimal.split用法及代碼示例
- Ruby BigDecimal.sub用法及代碼示例
- Ruby BigDecimal.coerce用法及代碼示例
- Ruby BigDecimal.-self用法及代碼示例
- Ruby BigDecimal.+big_decimal用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 BigDecimal.mode。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。