2015-09-15 4 views
1

Пробуя все различные решения от this question, он, похоже, не дает мне желаемого формата (1.000.000 | 1.234).C# String.Format() - формат номера не работает

Я попытался это:

dataBlock.ValueCell.Value = String.Format("{0:#.##0}", double.Parse(dataBlock.ValueCell.Value)); // 1 234 
dataBlock.ValueCell.Value = String.Format("{0:N0}", double.Parse(dataBlock.ValueCell.Value)); // 1 234 
dataBlock.ValueCell.Value = String.Format("{0}", double.Parse(dataBlock.ValueCell.Value.ToString("N0"))); // 1 234 

//values as I read them from Excel = OLDVALUE 
//values as I convert them to the wanted number format = NEWVALUE 
//OLDVALUE == 2238,8 
//NEWVALUE == 2 239 
//OLDVALUE == -5372 
//NEWVALUE == -5 372 
//OLDVALUE == 3909,6 
//NEWVALUE == 3 910 

Любые другие решения?

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

редактирует

edit1: Я попробовал этот

dataBlock.ValueCell.Value = dataBlock.ValueCell.Value.ToString().Replace(' ', '.'); И это дает мне тот же результат, как же формат строки и заменить не работают?

edit2: добавил ответ Никиту [Работа]

var doubleValue = double.Parse(dataBlock.ValueCell.Value); 
       Console.WriteLine("doubleValue = " + doubleValue); 

       var formattedValue = doubleValue.ToString("N0", new CultureInfo("is-IS")); 
       Console.WriteLine("formattedValue = " + formattedValue); 

       dataBlock.ValueCell.Value = formattedValue; 

дал мне этот выход:

doubleValue = 29300 
formattedValue = 29.300 
doubleValue = 20300 
formattedValue = 20.300 
doubleValue = 32360 
formattedValue = 32.360 
doubleValue = 28300 
formattedValue = 28.300 
doubleValue = 9000 
formattedValue = 9.000 
... 

Edit3:Here является более 'недостающими' данными, чтобы получить лучшее представление о ситуация

+0

Возможно, дубликат http://stackoverflow.com/questions/105770/net-string-format-to-add-commas-in-thousands-place-for-a-number ? lq = 1 – Steve

+0

Да, это то, что я упомянул в гиперссылке в первом предложении, я пробовал каждое решение там. – Edward

+0

Почему вы используете Parse(), попробуйте использовать только строковый формат. –

ответ

1

Добавить дополнительный шаг, чтобы проверить, как double.Parse() работы. Там могут быть некоторые сюрпризы. Один из них может быть полукокс разделение между целым значением и десятичных знаков: , или .

// step 1: verify your string taken from excel 
var cellString = dataBlock.ValueCell.Value.ToString(); 
// if you have a blank space there, remove it 
cellString = cellString.Replace(' ', ''); 

// step 2: verify your double converted value 
var doubleValue = double.Parse(cellString); 
Console.WriteLine("doubleValue = " + doubleValue); 

// step 3: verify the formatting 
var formattedValue = doubleValue.ToString("#.##0"); 
Console.WriteLine("formattedValue = " + formattedValue); 

dataBlock.ValueCell.Value = formattedValue; 

Позже редактирования после просмотра фактических данных: У вас есть пустое пространство в строке вы берете из клетки. Вы можете проверить это, добавив еще один шаг

+1

Точно. Это зависит от культуры. Из MSDN .: «Преобразует строковое представление числа в определенном формате для конкретной культуры» – BaBu

+0

Таким образом, это означает, что это не будет работать на каждой системе, это зависит от того, какой язык или региональные настройки у вас есть, например, иногда это будет читать его как 1234,56, а иногда и 1234,56? также это решение дало мне этот результат. http://i.imgur.com/T8qIqZB.png – Edward

+0

Typo в строке формата, так как нет аргументов, '0:' необходимо удалить. – tomab