将正常两位小数的数据源写入mysql后,再进行求和汇总等计算,结果常常发现会差个几分钱,这很有可能是mysql中关于金额的类型没有设置正确导致的。
先看下mysql中有哪些常用的表示小数的类型:
Name | CTS Type | Description | Significant Figures | Range (approximate) |
---|---|---|---|---|
float | System.Single | 32-bit single-precision floating point | 7 | ±1.5 × 10?45 to ±3.4 × 1038 |
double | System.Double | 64-bit double-precision floating point | 15/16 | ±5.0 × 10 ?324 to ±1.7 × 10308 |
decimal | System.Decimal | 128-bit high precision decimal notation | 28 | ±1.0 × 10?28 to ±7.9 × 1028 |
从上表可以看出,decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。
凡是跟钱相关的都需要使用 Decimal。
Decimal 是精确存储
float, double 是近似存储,并不精确。
decimal是128位高精度浮点数,具有更高的精度和更小的范围,这使它适合于财务和货币计算。所以一般的财务软件在处理时,都会用decim