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

floata=Convert.ToSingle(txtNum.Text);如果txtNum.Text输入0.32转化后输出的结果为:0.31999999284744263... float a=Convert.ToSingle(txtNum.Text);
如果txtNum.Text输入0.32 转化后输出的结果为:0.31999999284744263
如何才能想要的数值0.32呢?感谢各位大大。
asdf_12346:我的意思不是要转换成string格式,而是由string 格式转换成float的时候出现上述问题。感谢。
展开
 我来答
果建翼
推荐于2016-12-04 · TA获得超过7929个赞
知道大有可为答主
回答量:1684
采纳率:0%
帮助的人:2479万
展开全部
你要知道,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) < xxx) 其中xxx是一个足够小的数。

当然你在输出的时候是可以将这个float a输出成两位小数的,比如a.toString("F2");这样输出的时候会将a的值十进制小数点后2位之后进行四舍五入然后输出,但是a本身的值仍然是无法保证精确只有两位小数的。
-------------
补充:我知道你是要从string转float,不过原因我已经说了,这是float内部存储方式的问题,不是转换的问题,浮点数本来就无法精确存储一些小数,这个是没办法的。这也就是为什么许多涉及到金融业务的程序都采用的是定点数来保存金额等数字,而不是采用浮点数的原因。
我叫啥NO1
推荐于2017-10-15 · TA获得超过4735个赞
知道小有建树答主
回答量:570
采纳率:100%
帮助的人:35.5万
展开全部
程序例程如下:

double x = 6.50000000000;
float y = float.Parse(x.ToString());
Console.WriteLine(y.ToString("F2"));

以上程序将x值赋给y,y保留两位小数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f9383a2
2011-01-05
知道答主
回答量:8
采纳率:0%
帮助的人:6.9万
展开全部
不知道你怎么转的。我输入0.32转后还是0.32,难道说VS版本不同,结果也不同?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式