моя проблема выглядит так: Предположим, у меня есть 3 переменные (i = 1, j = 2, k = 3) Я хочу сделать это: «a = 0.ijk», поэтому a == 0,123 Но эти переменные находятся под несколькими for, поэтому я сохраняю их значение в массиве.
Я попытался использовать sstream, чтобы преобразовать их из строки в int (123), тогда я бы разделил его на 1000, чтобы получить 0,123, но это не работает ...
float arrayValores[ maxValores ];
ostringstream arrayOss[ maxValores ];
...
arrayOss[indice] << i << j << k;
istringstream iss(arrayOss[indice].str());
iss >> arrayValores[indice];
arrayValores[indice] = ((arrayValores[indice])/1000)*(pow(10,z)) ;
cout << arrayValores[indice] << " ";
indice++;
Кто-нибудь может мне помочь?
Вы знаете, что переменная с плавающей запятой не может точно представлять значение 0.1
или 0.02
? Лучшее, что вы можете получить, будет приблизительным.
Я не понимаю, о чем вы спрашиваете, но это то, что вы хотите сделать?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i = 1;
int j = 2;
int k = 3;
// Create a string of 0.123
string numAsString = "0." + to_string(i) + to_string(j) + to_string(k);
cout << numAsString << '\n';
// Turn the string into a floating point number 0.123
double numAsDouble = stod(numAsString);
cout << numAsDouble << '\n';
// Multiply by 1000 to get 123.0
numAsDouble *= 1000.0;
cout << numAsDouble << '\n';
// Turn the floating point number into an int 123
int numAsInt = numAsDouble;
cout << numAsInt << '\n';
return 0;
}
Вы этого хотите?
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
int main() {
// your i, j, k variables
std::vector<int> v = {1, 2, 3};
double d = 0;
for (int i = 0; i < v.size(); i++) {
// sum of successive powers: 1x10^-1 + 2x10^-2 + ...
d += pow(10, -(i + 1)) * v[i];
}
std::cout << d << "\n";
}
Что означает
0.123
? Подумайте о системе счисления десятичный, в которой мы работаем (основание 10). Что означает12
? Есть ли другой способ написать это? А как насчет0.123
?