如何将数字转换为0.mynumber
float a = i;
while(a >= 1.0f) a /= 10.0f;
对不起,但* MISRA *正在让我。你应该有'/ = 10.0f'。注意小数点和'f'后缀来表示一个'浮动'常数。 – 2013-04-05 16:39:53
@ThomasMatthews对,谢谢。 – 2013-04-05 16:44:17
需要'a> = 1'才能为'i = 1'工作。 – 2013-04-05 16:45:04
这是丑陋的,但我想这样的作品:
int i = 50;
std::stringstream ss;
ss << "0." << i;
float a;
ss >> a;
我看起来不丑。 – 2013-04-05 16:40:48
嘿......任何时候数字操作都涉及去往和来自一个字符串,我畏缩。有可能是比特换位更优雅,但这是我提出更快的黑客。 – 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
计算不使用任何循环。
我觉得这个小项目太复杂了:) – ShakeryGO 2013-04-06 07:41:07
@ShakeryGO:你能告诉我这里有什么复杂的吗?这是Daniel Freys答案的封闭形式。 (另外:为什么小项目比大项目更简单?) – 2013-04-06 08:49:28
您是否期望能够针对'i'的某些值获得'a = 0.01'或'a = 0.001'? – NPE 2013-04-05 16:35:26
你期待'a == 0.50'吗? – 2013-04-05 16:40:46