在SQL中,通常的做法是将金额存储在DECIMAL(10,2)
类型的列中。但是,当谈到Hibernate映射时,我希望避免将值映射到浮点数。有没有办法将列映射到包含分数的整数?
答案 0 :(得分:2)
使用小数(10,2)作为钱的做法很糟糕。 此外,使用浮动值换钱的做法是一种猴子技术(例如,只有猴子会认为存储具有非精确浮点数的固定点值是有意义的。)
相反,确定您需要存储的最小货币价值,例如1/1000欧元,并将货币存储为该值的整数倍。 继续这个例子,货币栏中的价值2.57欧元将由2570表示。
应始终使用整数值执行货币数学。
旁注:
猴子证明:
float value1 = .1;
float value2 = .2;
float value3 = value1 + value2;
if (value3 == .3)
printf ("m1. you are not a monkey");
else
printf ("m2. you are a monkey. learn something about floating point representation");
消息m1永远不会显示