将 BigDecimal 字符串转换为货币
Convert BigDecimal String to currency
我有一个纯字符串值,它是从 API 调用中获得的,并作为字符串存储在数据库中:
#<BigDecimal:7fabd9ba9618,'0.4173E2',18(18)>
这需要以某种方式转换成货币价值。
我希望这样的东西能起作用,但它只是 returns 为零。
v = BigDecimal.new("#<BigDecimal:7fabd9ba9618,'0.4173E2',18(18)>")
return v.to_s('F')
有什么想法吗?
首先:为什么那些 BigDecimal
存储在数据库中的 BigDecimal#inspect
表示中?这是错误和糟糕的,应该被修复。
虽然格式似乎记录在 ruby API 中,但可能不能保证在各个版本中保持不变。
我会使用正则表达式来解析相关部分,以确保我阅读了正确的内容并在格式不匹配时得到正确的错误:
match = big_decimal_as_string.match(/#<BigDecimal:[a-f0-9]+,'([0-9E\.]+)',\d+\(\d+\)>/)
if match
BigDecimal.new(match[1])
else
raise "Could not parse #{big_decimal_as_string}"
end
我有一个纯字符串值,它是从 API 调用中获得的,并作为字符串存储在数据库中:
#<BigDecimal:7fabd9ba9618,'0.4173E2',18(18)>
这需要以某种方式转换成货币价值。
我希望这样的东西能起作用,但它只是 returns 为零。
v = BigDecimal.new("#<BigDecimal:7fabd9ba9618,'0.4173E2',18(18)>")
return v.to_s('F')
有什么想法吗?
首先:为什么那些 BigDecimal
存储在数据库中的 BigDecimal#inspect
表示中?这是错误和糟糕的,应该被修复。
虽然格式似乎记录在 ruby API 中,但可能不能保证在各个版本中保持不变。
我会使用正则表达式来解析相关部分,以确保我阅读了正确的内容并在格式不匹配时得到正确的错误:
match = big_decimal_as_string.match(/#<BigDecimal:[a-f0-9]+,'([0-9E\.]+)',\d+\(\d+\)>/)
if match
BigDecimal.new(match[1])
else
raise "Could not parse #{big_decimal_as_string}"
end