c ++, что происходит с этим числом при преобразовании в строку [duplicate]

Самое простое решение - создать функцию JavaScript и вызвать его для обратного вызова Ajax success.

function callServerAsync(){
    $.ajax({
        url: '...',
        success: function(response) {

            successCallback(response);
        }
    });
}

function successCallback(responseObj){
    // Do something like read the response and show data
    alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}

function foo(callback) {

    $.ajax({
        url: '...',
        success: function(response) {
           return callback(null, response);
        }
    });
}

var result = foo(function(err, result){
          if (!err)
           console.log(result);    
}); 
6
задан user3094558 1 November 2014 в 00:45
поделиться

2 ответа

Вам нужно преобразовать его в строку и использовать для печати. Нет возможности для потока для печати плавающей точки без начального нуля, если таковой имеется.

std::string getFloatWithoutLeadingZero(float val)
{
    //converting the number to a string
    //with your specified flags

    std::stringstream ss;
    ss << std::setw(2) << std::setprecision(1);
    ss << std::fixed << val;
    std::string str = ss.str();

    if(val > 0.f && val < 1.f)
    {
        //Checking if we have no leading minus sign

        return str.substr(1, str.size()-1);
    }
    else if(val < 0.f && val > -1.f)
    {
        //Checking if we have a leading minus sign

        return "-" + str.substr(2, str.size()-1);
    }

    //The number simply hasn't a leading zero
    return str;
}

Попробуйте онлайн !

EDIT : Некоторым решением, которое вам может понравиться больше, будет особый тип float. например,

class MyFloat
{
public:
    MyFloat(float val = 0) : _val(val)
    {}

    friend std::ostream& operator<<(std::ostream& os, const MyFloat& rhs)
    { os << MyFloat::noLeadingZero(rhs._val, os); }

private:
    static std::string noLeadingZero(float val, std::ostream& os)
    {
        std::stringstream ss;
        ss.copyfmt(os);
        ss << val;
        std::string str = ss.str();

        if(val > 0.f && val < 1.f)
            return str.substr(1, str.size()-1);
        else if(val < 0.f && val > -1.f)
            return "-" + str.substr(2, str.size()-1);

        return str;
    }
    float _val;
};

Попробуйте онлайн !

5
ответ дан NaCl 27 August 2018 в 18:11
поделиться

В библиотеке iomanip нет функции для обрезки 0 перед cout. Вам нужно преобразовать вывод в строку.

Вот мое решение:

double number=3.142, n; //n=3
char s[2];
sprintf (s, ".%d", int(modf(number, &n)*10)); 
                     //modf(number, &n)=0.142 s='.1'
cout << s;
0
ответ дан Kir Chou 27 August 2018 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: