我需要做整数除法.我希望以下内容返回2而不是实际1:
187 / 100 # => 1
Run Code Online (Sandbox Code Playgroud)
这个:
(187.to_f / 100).round # => 2
Run Code Online (Sandbox Code Playgroud)
会起作用,但作为解决方案似乎并不优雅.是不是只有整数运算符187 / 100 = 2呢?
编辑
因为我一直在投票,我会更清楚我的用例:
我需要计算一个价格税.我所有的价格都是美分.问责制世界中没有1美分以下,所以我需要确保我的所有价格都是整数(那些检查税的人不喜欢错误......真的!)
但另一方面,税率是19%.
所以我想找到最好的写作方式:
def tax_price(price)
price * TAX_RATE / 100
end
Run Code Online (Sandbox Code Playgroud)
其可靠地返回一个整数,而没有任何浮动副作用.
我害怕去float世界,因为它对数字表示有非常奇怪的副作用,如:
因此,我发现留在世界integer或fractional世界更安全,因此我的问题.
您可以在保留整数世界的同时执行此操作,如下所示:
def round_div(x,y)
(x + y / 2) / y
end
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以Fixnum使用以下变体进行修补:
class Fixnum
def round_div(divisor)
(self + divisor / 2) / divisor
end
end
187.round_div(100) # => 2
Run Code Online (Sandbox Code Playgroud)
不 - (a.to_f / b.to_f).round是规范的做法.整数/整数的行为(例如)在C标准中定义为"丢弃余数"(参见http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf页面) 82)和ruby使用本机C函数.
| 归档时间: |
|
| 查看次数: |
5897 次 |
| 最近记录: |