Существует строка, содержащая число в произвольном формате (например, 12, -34.5 и 6.78e-9). Цель состоит в том, чтобы преобразовать эту строку в соответствующее число и затем преобразовать это число обратно в строку, такую, что (а) точность, указанная в исходной строке, сохраняется, и (b) результирующая строка имеет соответствующий формат (возможно, наиболее подходящим форматом является формат исходной строки). Я думал, что проблему можно легко решить, используя str2num
и num2str
; однако, в некоторых случаях, MATLAB, как представляется, коверкая конечный результат, как показано ниже:MATLAB: Преобразование строки в число, а затем обратно в строку
>> a = '1e23'
a =
1e23
>> b = str2num(a)
b =
1.0000e+23
>> c = num2str(b)
c =
9.999999999999999e+22
Одно из решений состоит в использовании общего строку формата:
>> c = num2str(b, '%e')
c =
1.000000e+23
Однако в этом случае выходной выглядит довольно громоздко для количества мелких заказов:
>> d = num2str(1, '%e')
d =
1.000000e+00
в большинстве случаев, num2str
без дополнительных параметров делает очень хорошую работу, что приводит к отформатированной строке. Возникает вопрос: есть ли способ устранить проблему 9.999999999999999e+22
?
Спасибо!
С уважением, Иван
@ Натан, спасибо за ответ. Я знаю о проблемах, связанных с арифметикой FP. – Ivan
могу спросить, в чем смысл? вы можете сохранить как строку, так и номер в любом случае ... – bla
Суть заключается в том, чтобы получить удобную для пользователя строку, сохраняющую оригинальную точность и без необходимости писать кучу специальных решений, ориентированных на конкретные ситуации. – Ivan