我有一个返回一行的 Clojure 查询,下面是返回行(映射)的部分打印输出。
({:employer_percent 0.00M, ... :premium 621.44M, ...})
这两列在mysql表中分别是decimal(5,2)和decimal(7,2)。
为什么每个值的末尾都有“M”后缀?这是形成并执行查询的代码。
(def db {:classname "com.mysql.jdbc.Driver"
:subprotocol "mysql"
:subname "//system/app"
:user "app-user"
:password "pwrd"})
(defn get-recent-gic-rows
[search-date lt-toggle]
(let [query (if (= 0 lt-toggle)
(str "select g.* from gic_employees g where g.processed_date <= '" search-date "' order by g.processed_date desc limit 1 ")
(str "select g.* from gic_employees g where g.processed_date < '" search-date "' order by g.processed_date desc limit 1 "))]
(j/query db
[query])))
M
后缀表示该数字是BigDecimal
。你可以在 REPL 中检查这一点
user=> (class 1)
java.lang.Long
user=> (class 1.0)
java.lang.Double
user=> (class 1M)
java.math.BigDecimal
由于您的数据库列类型是decimal(5,2)
and decimal(7,2)
,将数字转换为不安全float
or double
因为那些浮点类型不能代表所有的数字decimal(5,2)
or decimal(7,2)
准确。
您可以使用关键字“浮点不准确”进行谷歌搜索。 Stackoverflow 中也有大量文章和问答。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)