改变数字精度
Posted
技术标签:
【中文标题】改变数字精度【英文标题】:Changing number precision 【发布时间】:2010-06-18 13:25:29 【问题描述】:您将如何更改数字的精度,例如:float n = 1.2345
并将其存储回变量“n”并将其更改为1.23
?
【问题讨论】:
听起来您可能在问如何对数字进行四舍五入?如果你搜索它,你会发现很多以前的问题。 您要对数字进行舍入还是截断?当 n = 1.246 时会发生什么? 是的,将数字截断并放回变量'n'。 【参考方案1】:float n = 1.2345;
int scaled = n * 100
n = static_cast<float>(scaled)/100.0;
或一行:
n = static_cast<float>( static_cast<int>(n*100) ) / 100;
【讨论】:
【参考方案2】:#include <cmath>
n = roundf(n * 100.0f) / 100.0f;
或者如果您需要截断而不是舍入:
n = truncf(n * 100.0f) / 100.0f;
【讨论】:
请注意:这会舍入浮点数而不是截断它,这可能是也可能不是 Dave18 正在寻找的。span> @Bill:确实 - 我正在更新它以包括在您添加评论的同时截断的可能性。 ;-)【参考方案3】:看看这个问题:
Rounding Number to 2 Decimal Places in C
但是,在 C++ 中,如果您需要对数字进行四舍五入,我不会使用 printf
,而是使用流运算符:
using namespace std;
cout << setiosflags(ios::fixed) << setprecision(2);
cout << n;
【讨论】:
奇怪的是,当它是唯一提到显示目的的答案时,这被否决了,这很可能是 OP 的用例! +1。 @Jefromi :是的,不知道为什么它被否决了。我希望投反对票的人能做出解释。感谢支持!【参考方案4】:float truncated = static_cast<int>(n * 100) / 100.0f
应该可以工作。
【讨论】:
以上是关于改变数字精度的主要内容,如果未能解决你的问题,请参考以下文章