[四舍五入]四舍五入VS银行家舍入[四舍五入]四舍五入VS银行家舍入
篇一 : 四舍五入VS银行家舍入
相信细心的程序员们早就发现了.net环境下默认舍入算法
的是“四舍六入”的算法。,)从小学我们就学过“四舍五入”算法,但
是更加科学的舍入办法应该是“四舍六入”,也就是今天我们要讨论的
“银行家舍入”。
大家可以做一个Demo。
C#环境下
1: class Program2: {3: static void Main4: {5: do6: {7:
Console.WriteLine;8: string Num = Console.ReadLin...
[四舍五入]四舍五入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….精度已经丢失。
解决
使用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的区别与涵义
下一篇文章:[竞聘护士长精彩演讲稿]护士长竞聘演讲
本文档为【[四舍五入]四舍五入VS银行家舍入】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。