Как лучше всего приблизиться к окружению десятичных чисел в C#

У меня есть десятичное значение 18.8. Значения, которые хранятся в этой переменной, могут быть любого вида. Например, это может быть 1.0000000 или 1.00004000 или 5.00000008. Я хотел бы записать метод так, чтобы я мог передать десятичное число ему и окружаться строка. Это не было бы проблемой, если бы я буду знать десятичные разряды, я хотел бы добраться. Но то, что я хотел бы получить:

Когда это 1.0000000, это должно возвратиться 1.
Если это 1.00004000, это должно возвратиться 1.00004.
Когда это 5.00000008, это должно возвратиться 5.00000008. Так в основном это должно найти весь 0, которые находятся позади последней цифры, отличающейся затем 0, и отключают ее.

Как я должен приблизиться к нему? Каков лучший метод? Я получаю это значение от SQL и помещаю его в десятичную переменную, но затем я хотел бы отобразить его и наличие 5.0000000, когда это могло быть отображено, поскольку 5 немного излишества для меня.

Надежда я мог получить некоторые хорошие предложения.

9
задан Cœur 7 July 2019 в 07:17
поделиться

4 ответа

В типичной реализации, где int является 32-разрядной, -1 при преобразовании в неподписанную int является 4 294 967 295, которая действительно является ≥ 1000.

Даже если вы рассматриваете вычитание в беззнаковом мире, 1000 - (4 294 967 295) = -4,294,966,295 = 1 001 , что вы получаете.

Поэтому при сравнении без подписи с с gcc появится предупреждение. (Если предупреждение не отображается, установите флаг -Wsign-compare .)

-121--1260933-

Перестроение только измененных источников ДОЛЖНО быть поведением по умолчанию. Конечно, если изменить центральный заголовок, включенный почти во все зависимые файлы cpp, это вызовет почти полную перестройку. Посмотрите, что происходит, если вы изменяете только один файл cpp (добавляя комментарий или одинаково), если компилируется больше, чем эта единица компиляции, то я предлагаю вам инвестировать больше времени, чтобы исследовать его, в конечном итоге, давая вам мой EMail, чтобы глубже взглянуть на конфигурацию.

Другая возможность заключается в том, что вы составляете под окнами и используете версию 2.8, которая имеет ошибку, связанную с этим. Посмотрите на 2,9 версию, чтобы увидеть, если этот дефект отсутствует: http ://www.mail-archive.com/cmake @ cmake.org/msg24876.html

-121--3643167-

AFAIK, ToString («0. #») будет делать, просто увеличьте число #, чтобы ваше значение не округлялось. Например:

decimal d = 1.999m;
string dStr = d.ToString("0.###");

Это приведет к генерации последовательности «1,999» (разделитель зависит от используемой культуры).

В результате можно использовать обычное очень длинное форматирование последовательности: «0. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #» - для форматирования всех значений.

10
ответ дан 4 December 2019 в 20:24
поделиться

Так что обрежьте нули с конца.

decimal d = 1.999m;
string dStr = d.ToString().TrimEnd('0').TrimEnd('.');
2
ответ дан 4 December 2019 в 20:24
поделиться

Вы также можете использовать String.format и Вот Документация различных возможных форматов, но я люблю Йохан Шиханс больше как быстрая ссылка.

decimal number=4711.00004711m;
4711.00004711
string.Format("{0:0.#############}",number);
"4711,00004711"
number=42;
42
string.Format("{0:0.#############}",number);
"42"
1
ответ дан 4 December 2019 в 20:24
поделиться
-

Посмотрите на Слафов Джона Свиты: http://www.yoda.arachsys.com/csharp/floatingpoint.html

-2
ответ дан 4 December 2019 в 20:24
поделиться
Другие вопросы по тегам:

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