发布完全版四舍五入函数,绝对只得收藏!!!
自己经过研究,利用c库函数编写一个完全版四舍五入函数,和c的sprintf打印浮点数值相同的,
欢迎大家讨论并提出意见。
double round(double _x,int decimalnum)
{
//参数:数、保留小数位数
//说明:该函数只关心保留小数位数的后一位,与sprintf函数相同
// 例: round(0.499,2)=0.50 round(0.4949,2)=0.49
double num,dec,factor;
dec = modf(_x,&num); //分切整数与小数部分(不直接用long型数参与计算,
避免运算溢出)
factor= pow(10,decimalnum); //因子
dec *=factor; //小数点右移decimalnum位
dec +=_x>=0 ? 0.5:-0.5; //四舍五入运算
modf(dec,&dec); //取整
dec/=factor; //小数点左移decimalnum位
return num + dec; //合并返回值
};
有的网友运算过程中用int或long进行取整来实现,严格的来说是错误的(即使你的算法是对的),
因为int或long 是有数值上下限2^31的,这样的函数如果求66666666666666.66的四舍五入会发生
溢出错误(尤其重要,因为我们编写的浮点数精度四舍五入运算)
欢迎大家讨论并提出意见。
double round(double _x,int decimalnum)
{
//参数:数、保留小数位数
//说明:该函数只关心保留小数位数的后一位,与sprintf函数相同
// 例: round(0.499,2)=0.50 round(0.4949,2)=0.49
double num,dec,factor;
dec = modf(_x,&num); //分切整数与小数部分(不直接用long型数参与计算,
避免运算溢出)
factor= pow(10,decimalnum); //因子
dec *=factor; //小数点右移decimalnum位
dec +=_x>=0 ? 0.5:-0.5; //四舍五入运算
modf(dec,&dec); //取整
dec/=factor; //小数点左移decimalnum位
return num + dec; //合并返回值
};
有的网友运算过程中用int或long进行取整来实现,严格的来说是错误的(即使你的算法是对的),
因为int或long 是有数值上下限2^31的,这样的函数如果求66666666666666.66的四舍五入会发生
溢出错误(尤其重要,因为我们编写的浮点数精度四舍五入运算)
...全文
相关推荐
C++ 四舍五入函数
### C++ 四舍五入函数在C++编程中,四舍五入是一个常见的需求,尤其是在处理浮点数时。本篇文章将详细介绍一个自定义的四舍五入函数,并探讨如何解决该函数存在的问题。
C语言四舍五入的函数
对于初学者和资深开发者而言,掌握C语言中的基本数学函数,如四舍五入函数,是十分必要的。本文将深入探讨C语言中实现四舍五入功能的函数,以及其在实际编程中的应用。
MySQL之ROUND函数四舍五入的陷阱
在MySQL中,ROUND函数是一个非常常用的数学函数,用于对数值进行四舍五入操作。它接受两个参数:要四舍五入的数字和可选的小数位数。然而,在实际应用中,ROUND函数的行为并不总是如我们所期望的那样
sqlserver四舍五入使用round函数及cast和convert函数
"本文介绍了在SQL Server中如何使用ROUND函数以及CAST和CONVERT函数进行四舍五入操作。在处理带有小数点的数值时,ROUND函数通常是首选,它可以按照指定的小数位数进行四舍五入。
简明英汉词典词库完全版!430万词条!!!最全词典整合收录!全网最多!俚语、短语、专业、新词全部收录!完美支持GoldenDict!一部在手,天下我有!
简明英汉词典词库完全版!430万词条!!!最全词典整合收录!全网最多!俚语、短语、专业、新词全部收录!完美支持GoldenDict!一部在手,天下我有!


