Skip to main content
 Web开发网 » 操作系统 » linux系统

C#如何将float类型数值保留两位小数?

2021年10月17日8990百度已收录

  你要知道,float是浮点数,无法精确表示一个数值。所以你根本不可能在float内部精确表示一些小数,比如0。7或者你说的0。32。有兴趣的话可以研究下IEEE754标准,这个标准规定了电脑中浮点数如何存储,看完了你就会明白,这些小数在电脑中保存的时候都是转换成二进制保存的,而0。

  32和0。7这种小数,在十进制下是有限小数,但转换成二进制之后就是无限循环小数了,所以是无法精确用float表示的。你只能在float内部保存一个很接近的近似值。在代码中也不应该写:if(a==0。7)这种语句,因为浮点数a是无法精确表示0。

  7的,应该写成:if(Math。abs(a-0。7)  

  -------------补充:我知道你是要从string转float,不过原因我已经说了,这是float内部存储方式的问题,不是转换的问题,浮点数本来就无法精确存储一些小数,这个是没办法的。这也就是为什么许多涉及到金融业务的程序都采用的是定点数来保存金额等数字,而不是采用浮点数的原因。

评论列表暂无评论
发表评论
微信