Подавление запаздывания “.” в числовом выводе от Mathematica

Разногласия хороши, Вам не нужен одиночный элемент. Неудачно, что одна из худших привычек дизайна выйти из повального увлечения шаблонов является также одним из обычно принятый. Я обвиняю неудачное появление простоты, но я отступаю. Если бы они назвали его "Статическим Глобальным" шаблоном, я уверен, что люди были бы более робкими об использовании его.

я предлагаю использовать класс обертки с частным статическим экземпляром класса, который Вы хотите использовать для одиночного элемента. Вы не представите трудную пару всюду по своему коду как Вы, будет с одиночным элементом.

Некоторые люди называют это шаблоном моносостояния. Я склонен думать о нем как просто другое скручивание на понятии стратегии/агента, так как можно допускать больше гибкости путем реализации различных интерфейсов для представления/скрытия функциональности.

7
задан Pillsy 9 October 2009 в 20:50
поделиться

3 ответа

Я использовал это в прошлом при отображении чисел в цифрах:

Integerise[x_] := If[Round[x] == x, ToString[Round@x] <> ".0", ToString@x]

Просто удалите <> ".0" , если вы не хотите, чтобы целые числа были отображается с нулевым десятичным числом.

Обновление: Как упоминалось dreeves в комментарии, ToString по-прежнему будет усекать число в пределах 0,0001 или около того от целого числа и отображать точку.

A лучший способ удалить конечную точку - использовать формат Inputform для ToString:

NormalNumber[x_] := ToString[x, InputForm]

с тестом:

NormalNumber /@ {5, 5.5, 123.001, 123.0001}

Это может быть включено в Integerise выше, чтобы исправить отмеченную проблему .

5
ответ дан 7 December 2019 в 01:23
поделиться

Я рекомендую следующее:

shownum[x_] := StringReplace[ToString@NumberForm[x, ExponentFunction->(Null&)], 
                             RegularExpression["\\.$"]->""]

Он просто выполняет поиск и замену регулярного выражения на завершающем ".". Если вы хотите "123." чтобы отобразить как «123.0» вместо «123», тогда просто замените последнюю пустую строку на «.0».

ОБНОВЛЕНИЕ: Моя исходная версия отображалась неправильно для чисел, которые Mathematica по умолчанию отображает в экспоненциальной нотации. Я исправил это с помощью NumberForm.

Вот версия, которую я использую в реальной жизни. Он допускает необязательное округление:

(* Show Number. Convert to string w/ no trailing dot. Round to the nearest r. *)
Unprotect[Round];   Round[x_,0] := x;   Protect[Round];
re = RegularExpression;
shn[x_, r_:0] := StringReplace[
  ToString@NumberForm[Round[N@x,r], ExponentFunction->(Null&)], re@"\\.$"->""]
3
ответ дан 7 December 2019 в 01:23
поделиться

Я бы, вероятно, просто обработал строку постобработкой. Быстрее (и намного проще) просто проверить, является ли последний символ "." чем выполнять избыточную арифметику и учитывать все настройки точности.

Изменить: возможно, вы это знаете, но вы можете сделать что-то вроде этого:

userToString[expr_, form___] := ToString[expr,form];

userToString[expr_Real, form___] := removeTrailingDot[ToString[expr,form]];
1
ответ дан 7 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: