2013-05-01 4 views
1

(Я новичок в C++). У меня уже есть правильное количество несоответствий, и все в моей программе работает нормально, но когда я пытаюсь вычислить его, процент появляется как 0. Это часть моего кода (в частности, единственная часть, дающая проблемы). Может ли кто-нибудь объяснить мне, что я делаю неправильно?Процентное сходство между двумя строками

if(input.length() >= input2.length()) 
    { 
     percentage = (uiLevenshteinDistance(input,input2)/input.size())*100; 
     cout << "These sequences are " << percentage << "% similar." << endl; 
    } 
    else if(input2.length() >= input.length()) 
    { 
     percentage = (uiLevenshteinDistance(input,input2)/input2.size())*100; 
     cout << "These sequences are " << percentage << "% similiar." << endl; 
    } 
+1

Целое подразделение. '1/2' дает' 0'. – juanchopanza

+0

Вы пытаетесь разделить два целых числа? Если вы хотите получить результат с плавающей запятой, вам нужно сначала поместить хотя бы одно из целых чисел в 'float' или' double'. – MatthewD

+0

Этот вопрос не имеет никакого отношения к расстоянию Левенштейна. –

ответ

1

Убедитесь, что числитель или знаменатель ваш в подразделении является двойной/плавать в противном случае вы всегда будете получать 0 от деления, в результате чего ряд < 1.

Что-то вроде (double)uiLevenshteinDistance(input,input2)/input.size()) будет делать.

+0

Спасибо !!! :) Это было мое недостающее звено. – user2338411

+0

В тех случаях, когда вы хотите процент (что он делает), самым простым решением является умножение числителя на '100.0'_before_, выполняющее деление. Двойной в умножении заставляет все дальнейшие операции использовать 'double'. (И да, очень противоречиво, что '100.0 * x/y' дает радикально разные результаты, чем' x/y * 100.0'. Но C++ не одинок в этом.) –

Смежные вопросы