【问题标题】:How to remove point from float type in C? [closed]如何从C中的浮点类型中删除点? [关闭]
【发布时间】:2021-10-11 21:21:24
【问题描述】:

我有以下号码:14.2423421。这个数字是一个浮点数。我想将其转换为 142423421。所以,我想要相同的数字,但没有意义。它必须是一个整数。显然它不能是字符串类型。怎么做?谢谢大家!

【问题讨论】:

  • 你不只有这个号码,是吗?您希望如何转换 1.1
  • 如果x 是用float x = 14.242342f; 定义的float,您希望将x 转换为什么整数值?请记住,在大多数系统上,14.2423421f14.242342f 将具有 same 值。倒退一步,或许你能解释一下这是干什么用的?可能有更好的方法来解决根本问题,不管它是什么。
  • 如果您将数字视为字符串,“删除点”的概念似乎简单直观。但是,当您将数字...视为数字时,该概念毫无意义。你可以做什么样的数学运算来以你描述的方式“删除一个点”?更糟糕的是,由于浮点表示和随之而来的不精确性——“直观”的结果通常无法实现。也许您应该将数字直接表示为字符串。
  • 这个问题使用了有缺陷的浮点模型。在float 最常用的格式中,14.2423421 是不可表示的。最接近的可表示值是 14.2423419952392578125。所以程序没有数字 14.2423421,float 中没有信息可以告诉我们输入 14.2423419952392578125 应该产生 142423421 而不是 142423419952392578125。
  • 所以 1.1 -> 11,对吗? 1.10呢?应该是 110 还是 11?我怀疑你的号码一开始就不应该存储为浮点数。

标签: c types floating-point type-conversion integer


【解决方案1】:

按照here 的建议计算小数位数,然后将您的数字乘以 10^(小数位数)

【讨论】:

  • 这实际上是对上述问题的一个很好的回答。它不会很好地工作,但那是因为所述问题存在缺陷。但是,如果您有约束力并决心“删除小数点”,那么您可以做的最好的事情就是这样。 (找到linked question 做得很好。)你当然必须在最后对结果进行四舍五入,因为通常(大约一半的时间!)它将是一个以 0.999 结尾的数字,你会想要四舍五入直到最接近的整数。
猜你喜欢
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多