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