2010-06-08 3 views
5

У меня есть строка, которая содержит 0.5. Я должен преобразовать его в 0.50.конвертировать 0.5 до 0.50 в C#

Я попытался следующие способы, но ничего works.Please помочь

hdnSliderValue.Value составляет 0,5, я хочу workFlow.QualityThresholdScore быть 0,50

workFlow.QualityThresholdScore = Convert.ToDecimal(String.format("{0:d}",hdnSliderValue.Value)); 

workFlow.QualityThresholdScore = Convert.ToDecimal(String.format("{0:0.00}",hdnSliderValue.Value)); 

есть ли встроенная функция или мне придется для выполнения обработки строк для выполнения этого.

+1

И целевой 'workFlow.QualityThresholdScore' является десятичным типом, правильно? Ваша проблема, вероятно, когда вы _show_, а не когда вы _assign_ это. –

ответ

7

Самый простой способ, вероятно, является использовать строковые преобразования:

string text = "0.5"; 
decimal parsed = decimal.Parse(text); 
string reformatted = parsed.ToString("0.00"); 
decimal reparsed = decimal.Parse(reformatted); 

Console.WriteLine(reparsed); // Prints 0.50 

Это очень некрасиво, хотя :(

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

EDIT: Хорошо, если это вопрос i18n, вот консоль приложение, которое должно определенно распечатывают 0,50:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     CultureInfo invariant = CultureInfo.InvariantCulture; 
     string text = "0.5"; 
     decimal parsed = decimal.Parse(text, invariant); 
     string reformatted = parsed.ToString("0.00", invariant); 
     decimal reparsed = decimal.Parse(reformatted, invariant); 

     Console.WriteLine(reparsed.ToString(invariant)); // Prints 0.50 
    } 
} 
+0

Сэр, в соответствии с вашим кодом я делаю это, decimal parsed = decimal.Parse (hdnSliderValue.Value); string reformatted = parsed.ToString ("0.00"); workFlow.QualityThresholdScore = decimal.Parse (переформатированный); еще workFlow.QualityThresholdScore имеет значение 0.5. Быстрый просмотр для decimal.Parse (переформатированный) также показывает 0.5. Пожалуйста, расскажите, как исправить это. – Rohit

+0

@Rohit: Это может быть просто отладчик, вызывающий проблему. Что произойдет, если вы используете 'Console.WriteLine (workFlow.QualityThresholdScore)'? Код, который я показал, работает ... Кроме того, что такое код для свойства QualityThresholdScore? Если вы назначаете 0.50m прямо, как это проявляется? –

+0

Я пробовал вставлять код в консольное приложение, и он все равно печатает 0.5. Есть ли какой-либо параметр глобализации, который заставит его печатать 0.5. – Rohit

1

Это ToString("N2").

Edit: Добавить тестовый код, чтобы показать, как это работает

decimal a = 0.5m; 
Console.WriteLine(a); 
// prints out 0.5 
string s = a.ToString("N2"); 
decimal b = Convert.ToDecimal(s); 
// prints out 0.50 
Console.WriteLine(b); 
+0

Я не думаю, что этот метод поможет преобразовать 0,5 в 0.50 –

+0

@ Danny Chen: Работает для меня, я исправлю ответ с кодом, который я использовал для его проверки. –

+0

@ ho1: Это начинается с десятичной точки - OP начинается со строки, в соответствии с вопросом. По общему признанию, это не очень ясно - это может быть просто плохо описано. –

0

В числовых значений, 0,5 == 0,50. Ноль не добавляет никакой информации, поэтому, если QualityThresholdScore имеет числовой тип, вы получите 0,5 независимо от того, что. Если это строка, используйте decimal.ToString("0.00");.

+0

Не верно: 'decimal' отслеживает конечные нули. –

+0

Это не имеет значения для значения, хотя это и было моей точкой. – Femaref

+1

Как вы знаете, что важный пример использования ОП? По какой-то причине, возможно, он захочет провести различие между 0,5 и 0,50; в конце концов, эта способность именно поэтому десятичная * делает * отслеживать конечные нули. –

0

Вы пробовали workFlow.QualityThresholdScore = Convert.ToDecimal (hdnSliderValue.Value.ToString ("N2"));

0

Строгий вариант, поскольку никто не предложил его.

 string pointFive = "0.5"; 
     int decimals = (pointFive.Length-1) - pointFive.IndexOf('.'); 
     if (decimals >= pointFive.Length) 
     pointFive += ".00"; 
     else if (decimals == 1) 
     pointFive += "0"; 
     else if (decimals == 0) 
     pointFive += "00"; 

Возможно, даже быстрее, чем числовые преобразования и функции форматирования.

Смежные вопросы