本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。