Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何舍入浮点显示,使最后两位始终为“00”?_C_Numbers_Rounding - Fatal编程技术网

C 如何舍入浮点显示,使最后两位始终为“00”?

C 如何舍入浮点显示,使最后两位始终为“00”?,c,numbers,rounding,C,Numbers,Rounding,我需要用C编写一个程序,它可以执行以下操作: 编写一个程序,这样当用户输入一个浮点数时,它将该数字四舍五入到小数点后3位。显示结果时,显示5位小数,这意味着第4位和第5位小数都是0 如何将其四舍五入到小数点后3位,然后显示两个零?我不允许使用任何类型的数学库函数。您的任务有两个步骤: printf("%.5f\n",(int)(number*1000+0.5)/1000.0); 1将数字四舍五入至小数点后三位 双n=0.123456; n=int n*1000.0/1000.0;//=>0.1

我需要用C编写一个程序,它可以执行以下操作:

编写一个程序,这样当用户输入一个浮点数时,它将该数字四舍五入到小数点后3位。显示结果时,显示5位小数,这意味着第4位和第5位小数都是0


如何将其四舍五入到小数点后3位,然后显示两个零?我不允许使用任何类型的数学库函数。

您的任务有两个步骤:

printf("%.5f\n",(int)(number*1000+0.5)/1000.0);
1将数字四舍五入至小数点后三位

双n=0.123456; n=int n*1000.0/1000.0;//=>0.123 2将数字显示到小数点后5位

printf%.5f\n,n;//=>0.12300
您的任务有两个步骤:

1将数字四舍五入至小数点后三位

双n=0.123456; n=int n*1000.0/1000.0;//=>0.123 2将数字显示到小数点后5位

printf%.5f\n,n;//=>0.12300
没有数学方法:D

printf("%.3f00\n", n);

通常服从;参见R.的评论。

好吧,没有数学方法:D

printf("%.3f00\n", n);


通常服从;见R.的评论。

我试过数字*1000+.0005/1000;您可能想删除.0005上的一些小数位,就像所有小数位一样。它需要处理负数吗?我尝试了数字*1000+.0005/1000;您可能想删除.0005上的一些小数位,就像所有的小数位一样。它需要处理负数吗?这实际上不需要;有些情况下会打印错误的内容。@R..:您是说数字溢出整数的情况吗?这只是一种情况。还有一个事实,乘以1000是一个有损运算,因为1000不是2的幂。可能还有其他问题。基本上,归结起来就是,用浮点数学将浮点值四舍五入到小数点后N位是不容易的,因为浮点数不是十进制的,而是二进制的。pst的答案是正确的,因为printf系列是标准库中唯一可以对浮点数进行小数舍入的工具,而对浮点数进行小数舍入非常困难,您不想自己尝试。请尝试0x1.e84801f9db22dp+20,这是最接近2000000.1235000001的两倍,但数值略小于2000000.1235。它应该四舍五入到2000000.123,但您的算法将其四舍五入到2000000.124。这些只是我开始玩的一些随机测试用例;我相信你能找到更多的东西。这实际上不行;有些情况下会打印错误的内容。@R..:您是说数字溢出整数的情况吗?这只是一种情况。还有一个事实,乘以1000是一个有损运算,因为1000不是2的幂。可能还有其他问题。基本上,归结起来就是,用浮点数学将浮点值四舍五入到小数点后N位是不容易的,因为浮点数不是十进制的,而是二进制的。pst的答案是正确的,因为printf系列是标准库中唯一可以对浮点数进行小数舍入的工具,而对浮点数进行小数舍入非常困难,您不想自己尝试。请尝试0x1.e84801f9db22dp+20,这是最接近2000000.1235000001的两倍,但数值略小于2000000.1235。它应该四舍五入到2000000.123,但您的算法将其四舍五入到2000000.124。这些只是我开始玩的一些随机测试用例;我相信你还能找到更多。如果n是2^256会怎么样?@R。。将n包装为负数的溢出。否。调用UB的溢出。对于浮点到整型溢出,实impls不换行。他们经常在溢出时给出INT_MIN。如果n为2^256会发生什么情况?@R。。将n包装为负数的溢出。否。调用UB的溢出。对于浮点到整型溢出,实impls不换行。它们通常在溢出时给出INT_MIN。舍入不是特定于实现的,至少在支持IEEE算法的实现中不是这样。它与当前舍入模式相匹配,默认情况下,舍入模式为舍入到近邻模式。舍入不是特定于实现的,至少在支持IEEE算法的实现中不是。它与当前舍入模式相匹配,默认情况下,舍入到nearesteven。