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

Если у меня есть простое десятичное число в C#, и я хочу ToString без точек, запятых или десятичных знаков в любой культуре - как мне это сделать?

Я попробовал ToString("N0") с invariantculture, который удаляет десятичные знаки, но добавляет "." на моем языке.

Как лучше всего это сделать?


person Lars Holdgaard    schedule 30.03.2018    source источник
comment
Вы хотите, чтобы отображались все десятичные числа, только без разделителя? (т.е. 3.14 становится 314)?   -  person maccettura    schedule 30.03.2018
comment
@maccettura Нет, не обращайте внимания на десятичные дроби   -  person Lars Holdgaard    schedule 30.03.2018
comment
Итак, 3.14 должно стать 3?   -  person maccettura    schedule 30.03.2018
comment
F0: msdn.microsoft.com/en-us/library/   -  person Hans Passant    schedule 30.03.2018
comment
@HansPassant Вы должны опубликовать это как ответ, это именно то, что нужно для этого вопроса.   -  person TJ Wolschon    schedule 30.03.2018


Ответы (3)


Вы еще не уточнили в комментариях, но я подозреваю, что вы хотите что-то подобное?

3.14 -> 3

5.34543543 -> 5

Если это так, то вам просто нужно преобразовать decimal в int, что уменьшит точность и даст вам просто целое число.

string someString = ((int)someDecimal).ToString();

Если вы обнаружите, что часто повторяете эту логику, вы можете сделать простой метод расширения, чтобы он оставался СУХИМ:

public static class DecimalExtensions
{
    public static string ToIntString(this decimal input)
    {
        return ((int)input).ToString();
    }
}

И просто назовите это так:

string someString = someDecimal.ToIntString();

Простая скрипта здесь

РЕДАКТИРОВАТЬ

@HansPassant на самом деле дал самое простое решение в комментариях, и я чувствую себя глупо, не помня:

string someString = someDecimal.ToString("F0", System.Globalization.CultureInfo.InvariantCulture);

Это намного лучший ответ, и если Ганс опубликует ответ, я предлагаю отметить их как решение.

person maccettura    schedule 30.03.2018
comment
Отличный пример того, что, когда ваш разум застрял в какой-то культуре/напряжении, самое простое решение просто очевидно и легко. Спасибо, что показали, насколько я был глуп - отмечу как ответ через 6 минут ;-) - person Lars Holdgaard; 30.03.2018
comment
@LarsHoldgaard Я только что отредактировал и добавил пример метода расширения, если вы сочтете его полезным. - person maccettura; 30.03.2018
comment
Согласен с правкой. Может быть не самым читаемым, но определенно самым кратким, и вам не нужно делать никаких дополнительных вызовов методов. - person TJ Wolschon; 30.03.2018
comment
Убедитесь, что формат не использует разделители групп - я никак не могу вспомнить, может ли ToString создавать что-то вроде 1,000,000... Я бы лично явно указал InvariantCulture, чтобы быть уверенным... - person Alexei Levenkov; 30.03.2018


Простой способ - просто использовать Convert.ToInt32("Ваше значение") вместо .ToString().

So

результат строки = Convert.ToInt32("3.14").ToString();

В результате вы получите «3».

person jkmehmi    schedule 30.03.2018