Ответ 1
Формат вывода по умолчанию для decimal
round-trip, поэтому вам не нужно ничего делать особо. В этом смысле это похоже на int
.
Если бы я хотел преобразовать double в строку и вернуться к двойному, который соответствует точно, я бы использовал что-то вроде:
double d1 = 1 / 3.0;
string s = d1.ToString("R");
double d2 = double.Parse(s);
Но формат "R" не определен для десятичного типа (вы получаете "FormatException: спецификатор формата был недопустимым" ).
Каков способ создания строки округления для десятичного типа?
Формат вывода по умолчанию для decimal
round-trip, поэтому вам не нужно ничего делать особо. В этом смысле это похоже на int
.
Decimal
на самом деле является двоично-десятичным значением (он использует базу 10, а не 2, как в Double
), и поэтому нет необходимости специальные точные представления, такие как ToString("R")
;
Decimal value = 123.456m;
String result = value.ToString(CultureInfo.InvariantCulture); // <- That enough
См. также подробную информацию:
Если вы попытаетесь,
decimal d1 = 1m / 3;
string s = d1.ToString();
decimal d2 = decimal.Parse(s);
// where d1 == d2 = true
Вы увидите, что вам не нужны дополнительные опции форматирования для получения правильного представления string
.