【问题标题】:truncate a very large float to 2 digits c++将一个非常大的浮点数截断为 2 位数 c++
【发布时间】:2014-10-15 00:23:58
【问题描述】:

需要帮助了解我如何解决这个问题。

我有一个浮点数(这些是动态数字,不是静态的),其值例如:

-27.8738e007

我需要截断为 2 位数字 (-27.87),但我没有成功。

我尝试了不同的形式,但对于数字中的“e”没有任何作用......

例如:

float number = -27.8738e007;

int decimals = 2;
number = (roundf (number * pow (10, decimals)) / pow (10, decimals));

这将返回 -2.787383 + 008,我需要得到 -27.87

提前致谢

问候

【问题讨论】:

  • 将浮点数四舍五入到指定的小数位数很少有意义。浮点表示(几乎总是)是二进制的;像1.23 这样的数字甚至无法准确表示。对输出进行四舍五入确实有意义,但在内部四舍五入只会丢失信息。

标签: c++ truncate


【解决方案1】:

您似乎不熟悉科学记数法的工作原理。

-27.8738e007 是 -278738000,或 -2.787380e+08

截断或四舍五入到“n”位通常是指将数字四舍五入到小数点后给定的位数。这就是您发布的代码试图完成的任务。

当然,-278738000 四舍五入到小数点后两位数仍然是同一个数字,这就是你得到的答案。

-27.87380e+07 是 2.787380e+08

是同一个号码。

http://en.wikipedia.org/wiki/Scientific_notation

【讨论】:

  • 这是真的。我的实验室/工作区/服务器室在我的地下室。这正是我现在所处的位置。
  • 感谢 Sam,但是.. 我怎样才能将科学记数法转换为普通浮点数?
  • 科学记数法不能“转换”成任何东西。科学计数法表示 float 或 double 的值。无论是以科学还是固定精度形式表示,浮点数或双精度数的值都将完全相同。在格式化浮点数或双精度值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2021-01-25
  • 2013-12-31
相关资源
最近更新 更多