c# 如何获取小数的整数部分

是这样的,我需要的算法中,需要把小数取整,但是取整的数不能小于原来的数,也就是说,3.2取3,4.0取4,4.6取5.。。。。我本来想用b=(int)a+1来实现,结果遇... 是这样的,我需要的算法中,需要把小数取整,但是取整的数不能小于原来的数,也就是说,3.2取3, 4.0取4, 4.6取5.。。。。
我本来想用b=(int)a+1来实现,结果遇到像整数的情况下就出错了,把4.0也给我+1处理了。。
我是菜鸟,但急需写个小程序,麻烦大家,有没有其他的什么函数可以解决?
展开
 我来答
du瓶邪
推荐于2018-03-02 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2814万
展开全部
用(int)强制把double型转换(该转换不会四舍五入)如
double db = 25.6;
int tt = (int)db;
最后tt=25

若要四舍五入的话认为加0.5就可 如:
double db = 25.6;
db=db+0.5;
int tt = (int)db;
最后tt=26
fej121121
2012-11-14 · TA获得超过651个赞
知道小有建树答主
回答量:655
采纳率:66%
帮助的人:530万
展开全部
假如只是小数点一位的话那么就,(int)(a+0.4)最简单,
否则要判断是否为整数了a>(int)a?a+1:a;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhoucantong
2012-11-16
知道答主
回答量:18
采纳率:0%
帮助的人:14.4万
展开全部
这不就是四舍五入吗?Convert.ToInt32(a);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
snowmagic99
推荐于2017-11-25 · TA获得超过173个赞
知道答主
回答量:176
采纳率:0%
帮助的人:94.5万
展开全部
private int zhuanhuan(double a)
{
double a;
int b;
if(Convert.toInt32(a*10)%10>=5)
b=Convert.toInt32(a);
else b=Convert.toInt32(a)+1;
return b
}

使用 int b = zhuanhuan(4.0) 调用。
祝你学习愉快。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tech_Monkeye5
2018-05-03 · TA获得超过984个赞
知道小有建树答主
回答量:330
采纳率:92%
帮助的人:77.1万
引用du瓶邪的回答:
用(int)强制把double型转换(该转换不会四舍五入)如
double db = 25.6;
int tt = (int)db;
最后tt=25

若要四舍五入的话认为加0.5就可 如:
double db = 25.6;
db=db+0.5;
int tt = (int)db;
最后tt=26
展开全部
其实这里边有一个特别好玩的事,很多人不注意而已!
这里我就顺便就一下吧,在C#中其实是存在两种算法可以进行四舍五入计算的。一种叫四舍五入,一种叫银行家舍入算法(是四舍五入的一种)。
第一个是常规的四舍五入:ToString("0.00"); // 保留两位小数
该种计算的规则是看舍入值(精确值的后一位),例如ToString("0.00"),保留两位小数,则百分位为精确位(保留小数的最尾一位),而千分位则是舍入位。看果舍入位数字为5及其以上的的都要入位(进一位),否则要舍(直接丢掉)。
第二个是银行家舍入算法: Math.Round(double, int),其中第二参数就是要保留的小数位置。
两者除了一个返回的是字符串型,一个返回double类型不同之外,计算法则也是不同的,计算出的结果会让你大吃一惊:
int tmp = 4.65;
tmp.ToString("0.0")返回结果是字符型4.7!
Math.Round(tmp,1)返回的结果是double型的4.6(是的你没看错——是4.6)!
银行家的传入法则是,看舍入值,如果大于0.5*10^N,则进,如果小于则舍。如果等于,要看精确位的奇偶!如果是偶数则舍,如果是奇数则进!
换句话来说:Math.Round(4.75, 1)的结果就是4.8!但Math.Round(4.65,1)的结果就是4.6(不是4.7)!但是对于Math.Round(4.65000000000001,1)的结果就是4.7了!
两者的区别,四舍五入只看舍入位!而银行家传入算法则是看舍入值(区别好值与位的区别),因为四舍五入只看了位,所以逢5必进,而银行家舍入值为0.5*10^N时要看精确位的奇偶性!这一点一定要有区别的!
那么是不是.NET类库中就不存在四舍五入了呢?其实是Round方法的另一个参数MidpointRounding在控制,它默认实现的是银行家传入算法,如果改成MidpointRounding.AlwaysFromZero时(默认是ToEven),它不再考虑奇偶性了!,舍入值等于0.5*10^N时会进位——虽然还得这么理解,但其实与只看舍入位是一样的了!
所以其实可以使用Math.Round(double, int, MidpointRounding)这个方法的!
Math.Round(tmp, 1, MidpointRounding.AlwaysFromZero)是四舍五入;
Math.Round(tmp,1,MidpointRounding.ToEven)是银行家舍入算法;
当然——如果int的那位是0时,可以不写的!如果是舍入位在整数前时,该位可以为负数。
======================================================
当然,这里还存在一个极大的问题,数学上的进一法!包括退一法等均实现:
Math.Floor(),这是退位法则,在正数范围内(int)强转的结果与该结果相同!
Math.Ceiling(),这个是进位法则,在负数范围内与(int)强转结果相同。
数值 (int)强转 Math.Floor(tmp) Math.Ceiling(tmp)
4.15 4 4.0 5.0
-4.15 -4 -5.0 -4.0
这三者几乎都给你比较了!另外Math中存在很多静态的数学方法可以用的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式