2013-02-23 81 views
2

下面是我在做什麼:如何比較兩個包含小數值的字符串?

if (oss.str() != sValue)

我可以有例如:

2000000000.0002000000000.0

這是相同的值,但不是相同的字符串。我需要比較它的字符串,因爲我試圖捕獲最終溢出sValue

在這種情況下,我可以這樣做:

oss << std::setprecison(1) << std::fixed << value;

但問題是一樣的,如果我有:

2000000000.12000000000.123

我怎樣才能解決呢?

在此先感謝。

+0

是刪除所有尾隨0的不夠,或者你需要像1000.0 == 999.99? – 2013-02-23 19:51:04

+0

@grasGendarme不,我需要知道這些值是否相同。 (完全相同)在你的情況下,條件必須返回false。 – Elfayer 2013-02-23 19:59:15

回答

0

的工作答案:

size_t   i; 

    i = sValue.find('.'); // find the point 
    if (i < sValue.size()) // if there is one, then ... 
    { 
     i = sValue.size() - i - 1; // find the number of decimal 
     oss << std::setprecision(i) << std::fixed << value; // apply the precision 
    } 
    else // otherwise, it's neither a float neither a double 
    oss << std::setprecision(0) << std::fixed << value; // no need of precision 
    if (oss.str() != sValue) 
0

可以使用STRNCMP()函數從

int strncmp(const char *s1, const char *s2, size_t n); 

與c_str()上的std :: string方法和n =分鐘(s1.length(),s2.length());

使用整數比較是升壓

boost::lexical_cast<int>(s1) == boost::lexical_cast<int>(s2) 

方便的std :: string S1,S2做這項工作。

+0

如果在字符串的開始處得到0,它將不起作用 – 2013-02-23 19:56:51

+0

然後,簡單的答案是轉換爲數字類型並檢查相等性。希望你比整數比浮點數。 – Arcturus 2013-02-23 19:58:00

+0

@grasGendarme在字符串的開頭不會有0。 – Elfayer 2013-02-23 20:04:43

1

從小數點開始,做兩組比較,在每次迭代時解析和比較一個數字,然後到相反的兩端。

+0

所以你的意思是手動? – Elfayer 2013-02-23 20:25:01

+0

您可以取小數點前的數字,並將兩個長度相同的長度通過預先設定的0添加到較短的一個。在小數點後面,您可以將0添加到較短的一個。每個按字符串比較。並簽署檢查。 – swtdrgn 2013-02-23 20:37:39

+0

是的,它不是一個或兩個班輪(如果我是一個實施這個)。 – swtdrgn 2013-02-23 20:49:28