TatsuSheva Ответов: 3

Форматирование отображения текстового поля


Я стараюсь не использовать символ ',' в качестве разделителя тысяч при отображении строки, а вместо него использовать пробел. Наверное, мне нужно определить собственную культуру, но я, кажется, не совсем правильно ее понимаю. Какие-нибудь указания?

например: отображение 1000000 как 1 000 000 вместо 1 000 000

(Строка.Replace () - это не то решение, которое я хотел бы использовать :P)

Что я уже пробовал:

десятичные тест = десятичное.Синтаксический анализ(файл*. txt Текст);
тхт.Текст= тест.Метод toString("0,0");
Вот что я попробовал...

3 Ответов

Рейтинг:
1

IamWsk

Попробовать это.

txt.Text=String.Format("{0:C}",  test*(-1)).Replace(",", " ");

Он также добавит знак валюты, а затем заменит знак валюты, как показано ниже, если вы не хотите
txt.Text=String.Format("{0:C}",  test*(-1)).Replace(",", " ").Replace("$", "");


[no name]

Это не то, о чем спрашивал ОП.

IamWsk

Я забыл кое-что добавить, смотрите мое решение сейчас.Я Добавил".(",", " ")"

[no name]

Вы имеете в виду просто использовать замену, как уже было сказано в решении 2? Чем отличается ваше решение?

IamWsk

Мое решение сильно отличается от решения 2. Вы можете видеть, что решение 2 имеет 9 строк кода, а мое-только 1. С моим решением, надеюсь, у него не возникнет никаких проблем.

[no name]

Извините, Решение 1. Это одно и то же.

IamWsk

Некоторые вещи одинаковы, но мой код похож на "Ready for F5".

[no name]

Я... если вы имеете в виду то же самое, то вы правы. Эти 10 бесполезных интернет-точек действительно ценны для некоторых людей.

IamWsk

Я просто сравниваю свой код с предыдущими. Может быть, есть лучшие решения.

Рейтинг:
0

Foothill

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

char[] numberText = value.ToCharArray();
for (int i = 0; i < numberText.Length; ++i)
{
 if (numberText[i].Equals(','))
 {
   numberText[i] = ' ';
 }
}

return new String(numberText);


TatsuSheva

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

Foothill

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

char[] numberText = массив.Реверс (значение.ToCharArray ()); / / переверните символы так, чтобы они начинались с ЛСД
StringBuilder sBuilder = new StringBuilder (); / / используйте класс StringBuilder для построения числовой строки по одной цифре за раз
for (int i = 0; i < numberText. Length; ++i)
{
sBuilder.Append (numberText[i]); / / добавить цифру
если (i % 3 = 0)
{
sBuilder.Append (' ' ); / / если это тысячная цифра, добавьте свой пробел
}
}

// результат обратный, так что переверните и вернитесь
возвращает новую строку (Array.Реверс (sBuilder.Метод toString().ToCharArray()));

TatsuSheva

Я нашел кое-что интересное, но у меня есть проблема, когда я помещаю некоторые цифры в текстовое поле, курсор всегда перемещается влево ...
Вот код:
doubletext=двойной.Синтаксический анализ(файл*. txt Текст);
CultureInfoculture=CultureInfo.CreateSpecificCulture ("fr-FR");
тхт.Текст=текст.ToString("N0", культура);
У вас есть какие-нибудь идеи ?

Foothill

Попробуйте установить свойство righttoleft текстового поля в файл txt.Значение Righttoleft = Справа Налево.Да

TatsuSheva

Не получилось

Foothill

Ладно, я только что вытащил его из интернета. Я подтвердил, что это работает в одном из моих приложений WPF.
txt. FlowDirection = FlowDirection.Справа налево;

TatsuSheva

Мой-Winform :/

Foothill

Тогда прочтите это. Он должен рассказать вам все, что вам нужно знать.
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.righttoleft(v=против 110). aspx

Рейтинг:
0

David_Wimbley

Google - ваш друг. Я просто погуглил формат чисел с пробелами в c#, и он вернул 1,16 миллиона результатов.

Похоже, что предлагаемый маршрут состоит в том, чтобы сделать свой собственный пользовательский форматер чисел. Хотя иногда самый простой выход не так уж и плох (.(",", " "))

Гугл[^]

десятичная дробь - как бы я разделил тысячи пробелом в C# - переполнение стека[^]

форматирование-использование пользовательского разделителя тысяч в C# - переполнение стека[^]


TatsuSheva

NumberFormatInfo nfi = (NumberFormatInfo)
CultureInfo.Языка и региона существует.NumberFormat.Клон();
НФИ.NumberGroupSeparator = " ";
двойной текст = двойной.Синтаксический анализ(файл*. txt Текст);
тхт.Текст= текст.ToString("n", nfi);

Я положил это, но у меня нет того, что мне нужно...
Когда я пишу 2500 у меня есть 02 500 но я хочу 2 500

Ralf Meier

Я не могу этого подтвердить.
Когда я использую тот же код, он строит "2 500.00 "из исходной строки"2500".
Должно быть, у тебя что-то изменилось ...

David_Wimbley

Для меня также следующий код работает так, как ожидалось

var number = "2500";
NumberFormatInfo nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
double text = double.Parse(number);            
var finalFormatNumber = text.ToString("n", nfi); 
Console.WriteLine(finalFormatNumber);


И выходы 2 500.00.

Как уже упоминал Ральф, в вашем приложении должно быть что-то еще.

TatsuSheva

Он находится в текстовом поле когда я пишу 2500 он становится 02 500

Ralf Meier

А какой результат вы получите, если будете использовать точно такой же код, как показал Дэвид Уимбли ?

Я тоже попробовал это сделать с текстовым полем, и он получил тот же результат (2 500.00).
Поэтому мы должны посмотреть, в чем разница ...