浮点数精度控制⽅式总结(含mysql和java)
我们应该经常会遇到浮点数的计算或者控制浮点数⼩数位数,这⾥将⼯作中有可能会⽤到的⼀些控制浮点数精度的⽅法做出总结:
A.Mysql中的函数
format
format()函数会对⼩数部分超过指定位四舍五⼊,整数部分从右向左每3位⼀个逗号进⾏格式化输出
truncate(x,d)
整数位没有逗号分隔,⼩数位超过指定位直接舍去,不四舍五⼊
convert(expr,type);
convert()函数会对⼩数部分进⾏四舍五⼊操作,decimal(7,2)表⽰最终得到的结果整数部分位数加上⼩数部分位数⼩于等于7,⼩数部分位数2
B. Java中对于数字的格式化⽅法
包下)
DecimalFormat 是 NumberFormat 的⼀个具体⼦类,⽤于格式化⼗进制数字,可以处理正数负数货币等等——api上有
NumberFormat(DecimalFormat的直接⽗类)
myString = Instance().format(myNumber);
getInstance 或 getNumberInstance 来获取常规数值格式。使⽤ getIntegerInstance 来获取整数数值格式。使⽤getCurrencyInstance 来获取货币数值格式。使⽤ getPercentInstance 来获取显⽰百分⽐的格式。使⽤此格式,⼩数 0.53 将显⽰为53%
bigdecimal格式化两位小数
NumberFormat PercentInstance();
f.setMinimumIntegerDigits(4);//设置整数位数——其他同理
f.setMinimumFractionDigits(2);//设置⼩数位数——其他同理
BigDecimal(⼀般使⽤该类型来表⽰⾦钱)
不可变的、任意精度的有符号⼗进制数。BigDecimal 由任意精度的整数(⾮标度值) 和 32 位的整数标度 (scale—即⼩数位) 组成。如果为零或正数,则标度是⼩数点后的位数。如果为负数,则将该数的⾮标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表⽰的数值是(unscaledValue × 10-scale)