如何将数字转换为0.mynumber

问题描述:

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

所以

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

还是什么? 我该怎么做?

+0

您是否期望能够针对'i'的某些值获得'a = 0.01'或'a = 0.001'? – NPE 2013-04-05 16:35:26

+0

你期待'a == 0.50'吗? – 2013-04-05 16:40:46

float a = i; 
while(a >= 1.0f) a /= 10.0f; 
+0

对不起,但* MISRA *正在让我。你应该有'/ = 10.0f'。注意小数点和'f'后缀来表示一个'浮动'常数。 – 2013-04-05 16:39:53

+0

@ThomasMatthews对,谢谢。 – 2013-04-05 16:44:17

+0

需要'a> = 1'才能为'i = 1'工作。 – 2013-04-05 16:45:04

这是丑陋的,但我想这样的作品:

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

我看起来不丑。 – 2013-04-05 16:40:48

+0

嘿......任何时候数字操作都涉及去往和来自一个字符串,我畏缩。有可能是比特换位更优雅,但这是我提出更快的黑客。 – metalhead 2013-04-05 16:42:14

什么:

#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 

计算不使用任何循环。

+0

我觉得这个小项目太复杂了:) – ShakeryGO 2013-04-06 07:41:07

+0

@ShakeryGO:你能告诉我这里有什么复杂的吗?这是Daniel Freys答案的封闭形式。 (另外:为什么小项目比大项目更简单?) – 2013-04-06 08:49:28