在javascript(或coffeescript)中,我有以下函数:
bytesToMegabytes = (bytes) ->
return Math.round((b/1024/1024) * 100) / 100
我想在Ruby中重现它。我有:
def bytes_to_megabytes (bytes)
(((bytes.to_i/1024/1024) * 100) / 100).round
end
但这轮不同?例如,1153597在ruby代码中变为1。
在javascript(或coffeescript)中,我有以下函数:
bytesToMegabytes = (bytes) ->
return Math.round((b/1024/1024) * 100) / 100
我想在Ruby中重现它。我有:
def bytes_to_megabytes (bytes)
(((bytes.to_i/1024/1024) * 100) / 100).round
end
但这轮不同?例如,1153597在ruby代码中变为1。
6条答案
按热度按时间5cnsuln71#
我不想自作聪明,但似乎没有人注意到这里的计算混乱。1兆字节就是1000000字节(google it)。1024是关于10^2字节的过时混淆,即1024千字节。自1998年以来,这被称为kibibbyte(wiki),现在是标准。
这意味着您只需将您的字节除以1000000就完成了。我添加了一些四舍五入以获得额外的有用性:
envsm3lx2#
尝试:
您可以将
CONSTANT
设置为变量现在,我们来弄清楚
to_i
和round
,但这轮不同?例如,1153597在ruby代码中变为1。
to_i方法只取小数部分,它不会舍入数字,因此您必须转换为
float
然后舍入正如 *Stefen的评论 *:在Rails中,你可以这样做:
有关
megabyte
方法的更多详细信息Numeric#megabytexn1cxnb43#
这是有意义的,因为整数除法可以得到整数结果,1153597字节大约等于1MB。如果你先将你的输入转换为浮点数,它可能是你所期望的:
因此,请将代码更改为使用
to_f
而不是to_i
,并删除round
cigdeys34#
Ruby on Rails:
uujelgoq5#
JavaScript函数的等价物是
Ruby做整数除法,而JavaScript做浮点除法。因此,必须确保至少有一个操作数是浮点数。
qni6mghb6#
在ruby中,如果你有MB/KB/Bytes,并且想要转换成一个基本单位,那么使用下面的函数:
现在你可以传递
convert_size_to_bytes("30 MB")
,convert_size_to_bytes("2000 KB")
这将有助于你的计算