【发布时间】:2019-07-20 14:37:02
【问题描述】:
我正在尝试解决与个人项目相关的任务的边缘案例。
确定服务的单价,由total_amount和cost组成。
示例包括:
# 1
unit_price = 300 / 1000 # = 0.3
# 2
unit_price = 600 / 800 # = 0.75
# 3
unit_price = 500 / 1600 # = 0.3125
对于 1 和 2,unit_prices 可以保持不变。对于 3,四舍五入到小数点后 2 位就足够了,例如(500 / 1600).round(2)
浮动变长时出现问题:
# 4
unit_price = 400 / 56000 # = 0.007142857142857143
很明显,浮动是相当长的。在这种情况下,目标是四舍五入到第一位有效数字。
我考虑过使用正则表达式来匹配第一个非零小数,或者找到第二部分的长度并应用一些逻辑:
unit_price.match ~= /[^.0]/unit_price.to_s.split('.').last.size
欢迎任何帮助
【问题讨论】:
-
请定义“第一重要”是什么意思 你期望
400 / 56000 # = 0.007吗? -
应该提到这一点。是的,在那个例子中,它是
0.007 -
旁注:
400 / 56000在 ruby 中是0。400.0 / 56000是带小数的浮点数。
标签: ruby-on-rails ruby algorithm decimal