Я уже прочитал, выбросить предложения по Преобразование Double в строку в C ++ и Преобразование double в строку C ++? , но меня попросили создать функцию не-OOP, чтобы принятьв двойном, и вернуть std :: string, используя только математику.Я был в состоянии сделать это с помощью int в прошлом:
std::string toString(int value) {
string result = "";
bool negative = false;
if ( value < 0 ) {
negative = true;
value *= (-1);
}
do {
string tmpstr = "0";
tmpstr[0] += value%10;
result = tmpstr + result;
value /= 10;
} while ( value != 0);
if ( negative ) {
result = "-" + result;
}
return result;
}
, но проблема в том, что он использует проверку больше нуля, чтобы продолжать идти.Я продолжаю думать что-то вроде
if ( value < 0 ){
value *= 10;
}
Я думаю, что это должно идти до% 10, но я не уверен.каждый раз, когда я пытаюсь, я получаю целое число, а не десятичное число.
Например, я даю ему 125,5 (результат 251/2), и он выдает 1255. хотя в некоторых случаях я получаю только 125. любойпомощь была бы отличной.
Обновление: выбранное решение
std::string toString(float value){
bool negative = false;
if ( value < 0 ) {
negative = true;
value *= (-1);
}
int v1 = value; // get the whole part
value -= v1; // get the decimal/fractional part
//convert and keep the whole number part
std::string str1 = toString(v1);
std::string result = "";
do {
value *= 10;
int tmpint = value;
value -= tmpint;
string tmpstr = "0";
tmpstr[0] += tmpint % 10;
result = tmpstr + result;
value /= 10;
} while ( value != 0);
result = str1 + "." + result;
if ( negative ) {
result = "-" + result;
}
return result;
}