2013-05-01 3 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

이 질문은 Levenshtein Distance와는 아무런 관련이 없습니다. –

답변

1

당신의 분자 또는 부문에서 분모가 이중 있는지 확인합니다/당신은 항상 < 1.

뭔가 (double)uiLevenshteinDistance(input,input2)/input.size())처럼 할 것 숫자의 결과 부문에서 0을 얻을 것이다, 그렇지 않으면 부동.

+0

감사합니다 !!! :) 그건 내 실종 링크 였어. – user2338411

+0

백분율 (원하는 경우)을 원할 경우 가장 간단한 해결책은 나누기를 수행하기 전에 분자에 '100.0'을 곱하는 것입니다. 곱셈의 배수는 이후의 모든 연산에서 'double'을 사용합니다. (그리고 예,'100.0 * x/y'는'x/y * 100.0'과 근본적으로 다른 결과를 가져 오는 것은 반 직관적입니다. 그러나 C++은 이것만으로는 아닙니다.) –