2011-02-17 22 views
6

कस्टम दशमलव बिंदु और हजार विभाजक वर्णों के साथ, मैं संख्या (डबल) स्ट्रिंग को कैसे परिवर्तित कर सकता हूं?क्यूटी - कस्टम दशमलव बिंदु और हजार विभाजक

मैंने QLocale देखा है, लेकिन मैं स्थानीयकरण देश चुनना नहीं चाहता, बल्कि अपना खुद का दशमलव बिंदु और हजार विभाजक वर्ण निर्दिष्ट करना चाहता हूं।

धन्यवाद

+0

मैं मदद नहीं कर सकता लेकिन पूछने - क्यों यह कस्टम विभाजक का उपयोग करने के लिए आवश्यक है? क्या आप एक सूची को पार्स कर रहे हैं और डिलीमीटर के लिए दशमलव (या अवधि) का उपयोग करने के लिए मजबूर हैं? – spbots

+1

चूंकि यह गणित ऐप क्लाइंट कस्टम दशमलव बिंदु और हजार विभाजक वर्ण निर्दिष्ट करने के विकल्प चाहता है। इन अप्रासंगिक प्रश्न क्यों ... –

उत्तर

0

जब से तुम QLocale शायद आप (उदाहरण के लिए, QString :: संख्या के साथ) एक सरल रूपांतरण कर सकता है और फिर इच्छित वर्ण बाद में की जगह नहीं करना चाहती।

0

बहुत भयानक है, लेकिन काम किया

double doubleNumber = 5234556.3545; 
int precision = 2; 

QString stringNumber = QString::number(doubleNumber, 'f', precision); 

for(int point = 0, i = (stringNumber.lastIndexOf('.') == -1 ? stringNumber.length() : stringNumber.lastIndexOf('.')); i > 0; --i, ++point) 
{ 
    if(point != 0 && point % 3 == 0) 
    { 
     stringNumber.insert(i, ','); 
    } 
} 
9

क्यूटी कस्टम स्थान का समर्थन नहीं करता मिला है। लेकिन अभी समूह और दशमलव बिंदु पात्रों के साथ निपटने के लिए मामूली बात है:

Btw, spbots 'सवाल अप्रासंगिक नहीं है। लक्ष्य के बारे में अधिक जानकारी हमेशा मदद करती है और इससे आपको विभिन्न दृष्टिकोण मिल सकते हैं जो आपको बेहतर सेवा दे सकते हैं।

2

यहां यह है कि आप इसे std :: lib (no QT) का उपयोग करके कैसे करते हैं। अपने स्वयं के numpunct-व्युत्पन्न वर्ग को परिभाषित करें जो दशमलव बिंदु, समूहबद्ध चरित्र, और यहां तक ​​कि समूह के बीच अंतर निर्दिष्ट कर सकते हैं। अपने पहलू वाले लोकेल के साथ एक ostringstream imbue। वांछित के रूप में उस ostringstream पर झंडे सेट करें। इसके लिए आउटपुट और स्ट्रिंग प्राप्त करें।

#include <locale> 
#include <sstream> 
#include <iostream> 

class my_punct 
    : public std::numpunct<char> 
{ 
protected: 
    virtual char do_decimal_point() const {return ',';} 
    virtual char do_thousands_sep() const {return '.';} 
    virtual std::string do_grouping() const {return std::string("\2\3");} 
}; 

int main() 
{ 
    std::ostringstream os; 
    os.imbue(std::locale(os.getloc(), new my_punct)); 
    os.precision(2); 
    fixed(os); 
    double x = 123456789.12; 
    os << x; 
    std::string s = os.str(); 
    std::cout << s << '\n'; 
} 

1.234.567.89,12

1

qml उपयोगकर्ताओं के लिए:

function thousandSeparator(input){ 
    return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"); 
} 
+0

हालांकि यह कोड समस्या को हल करने में मदद कर सकता है, _why_ और/या _how_ इसे के बारे में अतिरिक्त संदर्भ प्रदान करने के उत्तर में प्रश्न दीर्घकालिक मान में काफी सुधार करेगा। कुछ स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें। –

+0

उत्तर मेरे लिए बिल्कुल सही है। धन्यवाद! – rsp1984

संबंधित मुद्दे