Tôi không biết nếu có một cách dễ dàng, nhưng bạn có thể viết chức năng của riêng bạn định dạng (cách cứng):
function mainFunction()
st = sprintfe('%d is imaginary, but %d is real!',1+3i,5);
disp(st);
st = sprintfe('%f + %f = %f',i,3,3+i);
disp(st);
end
function stOut = sprintfe(st,varargin) %Converts complex numbers.
for i=1:numel(varargin)
places = strfind(st,'%');
currentVar = varargin{i};
if isnumeric(currentVar) && abs(imag(currentVar))> eps
index = places(i);
formatSpecifier = st(index:index+1);
varargin{i} = fc(currentVar,formatSpecifier);
st(index+1) = 's';
end
end
stOut = sprintf(st,varargin{:});
end
function st = fc(x,formatSpecifier)
st = sprintf([formatSpecifier '+' formatSpecifier 'i'],real(x),imag(x));
end
Giải pháp này bị một số lỗi, (không xử lý% 2d ,% 3f) nhưng bạn có ý tưởng chung.
Dưới đây là kết quả:
>> mainFuncio
1+3i is imaginary, but 5 is real!
0.000000+1.000000i + 3.000000 = 3.000000+1.000000i
Nguồn
2013-06-30 22:21:48
Tôi sợ bạn có thể đúng. Tôi sẽ xem liệu có ai khác có ý tưởng khác không. – Jim