2016-05-19 3 views
1

Я хочу рассчитать процент точности. У меня есть код ниже. Но это дает неожиданный результат, подобный этому: «Точность 2,843137e + 01x37». Хотя ожидаемый результат «Точность 28,43%»Рассчитать процент в Matlab

y %Amount of correct data 
j %Amount of all data 
a = 'The accuracy is %dx%d.'; 
percent = '%.0f%%'; 
format short 
acc = 100 * double(y/j); 
sprintf (a,acc) 

Как это исправить?

Любая помощь была бы высоко оценена. Спасибо.

+0

Что такое 'y', что' j' и каков их тип? Вероятно, вы хотите сделать явное приведение, чтобы удвоить перед делением. – Bernhard

+0

Кстати, 2.843e + 01 == 28.43? – Bernhard

ответ

1

Вы почти есть то, что вы ожидали, просто положить его вместе правильный путь.

Правильный формат спецификации для 28,43% равен %.2f%%. Это дает вам две цифры после десятичной точки и добавляет% -sign в конец. У вас это определено в переменной percent, за исключением того, что .0 должно быть .2 для двух цифр, как вы писали в ожидаемом результате. Если вы посмотрите внимательно, вы поймете, что percent никогда не используется.

Давайте придем к выводу. Измените спецификатор формата на следующее:

a = 'The accuracy is %.2f%%'; 

Это все, что вам нужно сделать. Строка, определяющая percent, может быть опущена, а также format short, если вам это не понадобится позже.

Что-то важное в отношении приведения к двойному: то, что вы в настоящее время только что приложили к результату. Если необходимо, сделайте литье отдельно до y и/или jперед делением. Вероятно, вам не нужно кастинг в вашем случае.


Весь код с предположением для y и j является:

y = 28.43137; %// Amount of correct data 
j = 100;  %// Amount of all data 

a = 'The accuracy is %.2f%%'; 
acc = 100 * (y/j);     %// no cast 
% acc = 100 * (double(y)/double(j)); %// with cast 
sprintf(a,acc); 

Выход:

ans = 
The accuracy is 28.43% 
+0

Спасибо за четкое объяснение. Это работает. –

+0

@AnaAin Добро пожаловать. Еще одно замечание: я предполагаю, что бросок, чтобы удвоить, не нужен. Я добавил свой ответ, чтобы показать правильный способ бросить *, если это необходимо *. – Matt

1

Try,

a = 'The accuracy is %f.'; 
acc = 100 * double(y/j); 
sprintf (a,acc)