我將大整數(通常為 15-30 位)存盤為一個字串,代表一定數量的給定電流(例如 ETH)。還存盤了移動小數點的位數。
{
"base_price"=>"5000000000000000000",
"decimals"=>18
}
我最終要尋找的輸出是5.00(如果從中取出小數5000000000000000000并將其移至左側 18 個位置,您會得到什么)。
我將如何在 Ruby 中做到這一點?
uj5u.com熱心網友回復:
鑒于:
my_map = {
"base_price"=>"5000000000000000000",
"decimals"=>18
}
你可以使用:
my_number = my_map["base_price"].to_i / (10**my_map["decimals"]).to_f
puts(my_number)
uj5u.com熱心網友回復:
h = { "base_price"=>"5000000000000000000", "decimals"=>18 }
bef, aft = h["base_price"].split(/(?=\d{18}\z)/)
#=> ["5", "000000000000000000"]
bef '.' aft[0,2]
#=> "5.00"
正則運算式使用正向前瞻(?=\d{18}\z)在數字之間的(“零寬度”)位置拆分字串,以便18數字跟隨到字串的末尾。
這不能解決潛在的邊界情況,例如
{ "base_price"=>"500", "decimals"=>1 }
或者
{ "base_price"=>"500", "decimals"=>4 }
它也不考慮舍入問題。
uj5u.com熱心網友回復:
正則運算式和插值?
my_map = {
"base_price"=>"5000000000000000000",
"decimals"=>18
}
my_map["base_price"].sub(
/(0{#{my_map["decimals"]}})\s*$/,
".#{$1}"
)
小數位數被插入到正則運算式中,作為要從字串末尾(加上零個或多個空白字符)查找的零的計數。這是匹配的,并且匹配.在它前面加上一個。
生產:
=> "5.000000000000000000"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/336759.html
上一篇:如何滾動到部分但與頂部保持距離?
