[四舍五入]四舍五入VS银行家舍入
篇一 : 四舍五入VS银行家舍入
相信细心的程序员们早就发现了.net环境下默认舍入算法
的是“四舍六入”的算法。,)从
小学
小学生如何制作手抄报课件柳垭小学关于三违自查自纠报告小学英语获奖优质说课课件小学足球课教案全集小学语文新课程标准测试题
我们就学过“四舍五入”算法,但
是更加科学的舍入办法应该是“四舍六入”,也就是今天我们要讨论的
“银行家舍入”。
大家可以做一个Demo。
C#环境下
1: class Program2: {3: static void Main4: {5: do6: {7:
Console.WriteLine;8: string Num = Console.ReadLine;9: try10: {11:
Console.WriteLine));12: }13: catch {14:
break;15: }16: }17: while ;18: }19: }
得到的结果如下
VB.net环境下测试代码为
1: Sub Main2: Do3:
Console.WriteLine4: Try5: Dim a As String = Console.ReadLine6: Console.WriteLine))7:
Catch ex As Exception8: Exit Sub9: End Try10: Loop11: End Sub
结果如下
完全符合银行家舍入的规律:四舍六入五考虑,五后非零就进
一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
关于VB.net中的CInt微软的MSDN上有具体
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
今天又踩了一个坑,使用DecimalFormat来完成四舍五入,但
是传入的是float类型,几轮测试才发现一个问题,传入的float会被
转为double类型,大家都知道float是4位,double是8位,强转肯
定会造成进度丢失。
使用下面的方法
public static String formatMoney { DecimalFormat format = new DecimalFormat; format.setRoundingMode; return “,” +
format.format; }传入1.15 返回的是1.1 传入1.25 返回的是
1.3
好奇怪哦,format.format默认是接收double类型,我现在传入
了float类型,也没有报错,但是它已经强转为了double类型,1.15
已经转为1.149999999….精度已经丢失。
解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
使用BigDecimal 来不丢进度的将float转换位double
修改方法
public static float formatFloat { BigDecimal decimal = new
BigDecimal); DecimalFormat format = new DecimalFormat;
format.setRoundingMode; return Float.parseFloat)); } 使
用format.setRoundingMode;可以控制转换的方式,具体文档可以参考
java doc
扩展:bigdecimal 四舍五入 / bigdecimal不四舍五入 / decimal
四舍五入
上一篇文章:[包含与包涵的区别]matlab中的
fix,round,floor,ceil的区别与涵义
下一篇文章:[竞聘护士长精彩演讲稿]护士长竞聘演讲