【问题标题】:How to convert a number to 0.mynumber如何将数字转换为 0.mynumber
【发布时间】:2013-03-28 04:04:41
【问题描述】:

如何将数字转换为 0. 和数字?

所以

int i = 50;
float a = 0.i //wrong code :D

还是什么? 我该怎么做?

【问题讨论】:

  • 对于i 的某些值,您是否期望能够获得a = 0.01a = 0.001
  • 你期待a == 0.50吗?

标签: c++ numbers converter


【解决方案1】:
float a = i;
while( a >= 1.0f ) a /= 10.0f;

【讨论】:

  • 抱歉,MISRA 找我了。你应该有/= 10.0f。注意小数点和f 后缀以表示float 常量。
  • @BarışUşaklı 谢谢。 (我真的不应该在真正专注于其他事情的同时回答问题:-P)
  • @DanielFrey 这不是每个人都在做的事情吗? :P
【解决方案2】:

这很难看,但我认为这可行:

    int i = 50;
    std::stringstream ss;
    ss << "0." << i;
    float a;
    ss >> a;

【讨论】:

  • 嘿...每当数字运算涉及到字符串的往返时,我都会畏缩。移位可能会更优雅,但这是我想出的更快的技巧。
【解决方案3】:

怎么样:

#include <cmath>
#include <initializer_list>
#include <iostream>

float zero_dot( float m ) {
   return m / pow( 10.0, floor( log( m ) / log( 10.0 ) ) + 1 );
}

int main() {

   for( auto const & it: { 5.0, 50.0, 500.0, 5509.0, 1.0 } ) {
      std::cout << it << ": " << zero_dot( it ) << std::endl;
   }

   return 0;
}

输出是:

5: 0.5
50: 0.5
500: 0.5
5509: 0.5509
1: 0.1

计算不使用任何循环。

【讨论】:

  • 我觉得这个小项目有点太复杂了:)
  • @ShakeryGO:你能告诉我这里有什么复杂的吗?这是 Daniel Freys 答案的封闭形式。 (另外:为什么小项目比大项目“简单”?)
猜你喜欢
  • 2017-10-25
  • 2017-05-12
  • 1970-01-01
  • 2014-01-17
  • 2013-04-26
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多