Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ 将双数四舍五入到十分之一_C++_Double_Rounding - Fatal编程技术网

C++ 将双数四舍五入到十分之一

C++ 将双数四舍五入到十分之一,c++,double,rounding,C++,Double,Rounding,可能重复: 好吧,假设我有一个号码8.47434。我想把它四舍五入到8.5和小数点后1位。在C++中,我将如何执行此操作?乘以10,再次取整并除以10 例如: round(10 * 8.47434f) / 10; floor(10 * 8.47434f + 0.5f) / 10; 编辑: 好的,我刚刚发现round()并不总是出现在math.h中 上述内容在gcc和icl(使用Microsoft的库)中有效,但在tcc中无效 然而,floor()是标准库的一部分。因此,我们可以添加0.5并

可能重复:


好吧,假设我有一个号码
8.47434
。我想把它四舍五入到8.5和小数点后1位。在C++中,我将如何执行此操作?乘以
10
,再次取整并除以
10

例如:

round(10 * 8.47434f) / 10;
floor(10 * 8.47434f + 0.5f) / 10;
编辑:

好的,我刚刚发现
round()
并不总是出现在
math.h

上述内容在gcc和icl(使用Microsoft的库)中有效,但在tcc中无效

然而,
floor()
是标准库的一部分。因此,我们可以添加
0.5
并使用
floor()

例如:

round(10 * 8.47434f) / 10;
floor(10 * 8.47434f + 0.5f) / 10;

您可以将整数乘以10,再加上0.5的强制转换,然后除以10

如果数字为负数,则减去0.5或乘除负10。

std::floor(d)+std::floor((d-std::floor(d))*10.0+0.5)/10.0

这样做不会降低精度,而其他答案会将原来的两倍乘以10。(
d
是您的电话号码)


但要预先警告:浮点数不能代表任何东西。双打时:
1.35
将四舍五入为
1.399999999999
123.34
首先将表示为
123.3499999999999
,使其四舍五入为
123.3
,而不是预期的
123.4
;etc

对于一个快速而肮脏的解决方案,你可能需要特别阅读。缺少几度的细微差别,你可能,实际上肯定会因为乘以10而失去精度,边缘案例将以错误的方式取整你的示例似乎是错误的,我想你最近的编辑更改了错误的
5
->
4