c语言中怎么四舍五入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中怎么四舍五入相关的知识,希望对你有一定的参考价值。

# incloud <stdio>

int main(void)

float a ;

scanf(“%f”,&a);

a=(int)(a*1000+0.5)/1000.0;

printf (“%0.3f”,a);

return 0;

扩展资料

其他方法实现四舍五入:

int myround(double indata,int precision,double * outdata)
 

long pre = 1,i;

for(i = 0; i <precision; i ++)pre = pre * 10;

if(cy_FloatCompare(indata,0.00)> 0)

* outdata =(int)((indata * pre)+0.5)/100.00;

else  

* outdata =(int)((indata * pre)-0.5)/100.00;

return 0;

 

// cy_FloatCompare是浮点数与0比较的函数,假设它存在。返回值与strcmp相同。

参考技术A

设 float x ; int  y ; 则有y=(int)(x+0.5)>(int)x?(int)x+1:(int)x进行上述运算后,y 的值就是 x 四舍五入的结果。

利用取整运算的截断特点实现。
比如:int a=0.75;取整后赋值给a的是0,小数点后面的被截断了。
如果要做整数的四舍五入,那么可以:a=(int)(0.75+0.5);取整后得到的与数学中四舍五入的结果一致,都是1;

如果要进行小数点后面的四舍五入,可以这样计算:
要保留小数点后面两位的小数,即在小数点后面两位上做四舍五入,0.756
float a=0.756,b; int x; b=a*100; b+=0.5; x=b; b=x/100;

运算是这样的:先将0.756乘以100,得到75.6,然后利用取值运算的截断做四舍五入,75.6+0.5=76.1取整后等于76,再除以100,得到结果:0.76

参考技术B 如果只是要求输出结果“四舍五入”,只要通过输出格式符控制即可。
例如:
double pi=3.1415926;
printf("%.4lf\n",pi);
可得输出为3.1416。
printf("%.2lf\n",pi);
可得输出为3.14。

如果是要把变量本身的值四舍五入到4位小数,则可以这样处理:
double pi=3.1415926;
pi=((int)(pi*10000+0.5))/10000.0;
参考技术C 比如小数为 f

(float)((int)(f*100+0.5))/100.0

首先为了保留两位,乘以100,小数点向前两位, 然后+0.5取整保证是四舍五入 再转成 float形式或double形式 除以100 就OK了
参考技术D

将整数+5,再整除10,再乘以10,就可以了

参考代码:

#include<stdio.h>

int main()

int n=0;
scanf("%d", &n );
printf( "%d\\n", (n+5)/10*10 );
return 0;

在Java语言中四舍五入,使其与C#匹配

我有一个用nodejs编写的应用程序。该应用程序需要计算海事征费。计算需要匹配端口的结果。端口中的征费计算器用C#编写。

这是Javascript代码:

console.log('Testing rounding -- js')
nrt = 34622
c = 0

if (nrt <= 5000) c = nrt * 0.405
else if (nrt > 5000 && nrt <= 20000) c = 2025 + ( (nrt - 5000) * 0.291)
else if (nrt > 20000 && nrt <= 50000) c = 6390 + ( (nrt - 20000) * 0.24)
else c = 13590 + ( (nrt - 50000) * 0.18)

var p = nrt * 0.1125

var t = c + p

console.log(t)
console.log(t.toFixed(2))

结果:

Testing rounding -- js
13794.255
13794.25

这是C#代码:

using System;

namespace sample1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Testing rounding -- csharp");

            decimal nrt = 34622;
            decimal  c = 0;
            if (nrt <= 5000) c = nrt * (decimal) 0.405;
            else if (nrt > 5000 && nrt <= 20000) c = 2025 + ( (nrt - 5000) * (decimal) 0.291);
            else if (nrt > 20000 && nrt <= 50000) c = 6390 + ( (nrt - 20000) * (decimal) 0.24);
            else c = 13590 + ( (nrt - 50000) * (decimal) 0.18);

            decimal p = nrt * (decimal) 0.1125;

            decimal t = c + p;

            Console.WriteLine(t);
            Console.WriteLine(Decimal.Round(t, 2));
        }
    }
}

结果:

Testing rounding -- csharp
13794.2550
13794.26

[请注意,我一点都不了解C#。我意识到它具有“十进制”类型,该类型小于[[128位数据类型,适合财务和货币计算。它具有28-29位精度

据我所知,JavaScript无法处理128位数据类型。

我也想知道问题是否可能在于四舍五入的不同实现。

我写这篇文章是因为我还补充说13794.2550在整个系统中难以可靠地四舍五入。这是一个完全不同的兔子洞。

但是,例如,使用rounding function blatantly stolen from stackoverflow

function r(n, decimals) { return Number((Math.round(n + "e" + decimals) + "e-" + decimals)); } console.log(r(13794.2550,2)) console.log(13794.2550.toFixed(2))

结果:

13794.26 <--- this is what I want! But, is it reliable? 13794.25

舍入函数似乎给出相同的结果。因此,也许我遇到了“舍入实现”问题,而不是“精度不够”问题。但是,它可靠吗?

(即c#Decimal.Round函数的实现与rounding function blatantly stolen from stackoverflow完全一样吗?

答案
我认为您遇到的问题是因为您使用的是不同类型的舍入函数。

在JS部分中,您使用的是toFixed(),而不是Math.round()。 toFixed不在意。这是一个Cutt-off功能。您应该能够使用Math.round()获得与C#中相同的结果。它们均由Microsoft维护,因此通常它们的工作原理非常相似,有时具有相同的库实现(从用户角度而言)。

Math.round(num) vs num.toFixed(0) and browser inconsistencies

因此,您使用的第二种实现是可靠的。如果您担心128字节转换,请尝试使用double而不是decimal,并检查是否与double的结果相同是64位,如果需要进一步测试,请使用32位的float

以上是关于c语言中怎么四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

C语言,一个浮点数,怎么四舍五入保留到个位数

C语言中数值转换啥时候需要四舍五入,啥时候不需要?如3.1415926转换成%f就是3.141

C语言有没有数据的四舍五入?啥情况下会用到四舍五入?数据类型转换?

用C语言怎么实现浮点数的四舍五入,保留两位小数点

c语言中如何进行四舍五入,求详细解释!!谢谢!

c语言中有没有进行四舍五入的函数