Произведите строку с круговым движением для десятичного типа

Если бы я хотел преобразовать double в строку и вернуться к двойному, который соответствует точно, я бы использовал что-то вроде:

double d1 = 1 / 3.0;
string s = d1.ToString("R");
double d2 = double.Parse(s);

Но формат "R" не определен для десятичного типа (вы получаете "FormatException: спецификатор формата был недопустимым" ).

Каков способ создания строки округления для десятичного типа?

Ответ 1

Формат вывода по умолчанию для decimal round-trip, поэтому вам не нужно ничего делать особо. В этом смысле это похоже на int.

Ответ 2

Decimal на самом деле является двоично-десятичным значением (он использует базу 10, а не 2, как в Double), и поэтому нет необходимости специальные точные представления, такие как ToString("R");

  Decimal value = 123.456m;
  String result = value.ToString(CultureInfo.InvariantCulture); // <- That enough 

См. также подробную информацию:

http://csharpindepth.com/articles/general/decimal.aspx

Ответ 3

Если вы попытаетесь,

decimal d1 = 1m / 3;
string s = d1.ToString();
decimal d2 = decimal.Parse(s);
// where d1 == d2 = true

Вы увидите, что вам не нужны дополнительные опции форматирования для получения правильного представления string.