2017-02-07 23 views
2

У меня есть двойное значение, как показано нижеКак преобразовать двойное значение в строку без потери данных в C#

double propertyValue = 1994.7755474452554; 

Когда я преобразовать это двойное значение строки, он показывает результат, как

string value = propertyValue.ToString(); 

значение будет, как, "1994.77554744526"

Он имеет округлить последняя цифра, 2554 к 26

Но я не хочу округлять значение сомнения. Поделитесь своими идеями.

ответ

2

По умолчанию метод .ToString() Double возвращает 15 цифр точности. Если вы хотите, чтобы полные 17 цифр совпадали с двойным значением, вам необходимо передать спецификатор формата G17 в этот метод.

String s = value.ToString("G17"); 

Это предотвратит округление двойного значения при преобразовании в строку.

value = propertyValue.ToString("G17"); 
+0

Эта статья [MSDN Article] (https://msdn.microsoft.com/en-us/library/kfsatb94.aspx) d объясняет это. – ViVi

+0

Hi ViVi, Если свойство propertyValue является «Object». средство, object propertyValue = 1994.7755474452554; value = propertyValue.ToString ("G17"); выдает ошибку [no overload для метода «ToString» принимает 1 аргумент] – Kalai

+0

@Kalai Это означает, что свойство объекта может быть преобразовано только в строку в соответствии с заданными правилами. У него нет коррекции точности, как в 'double.tostring (« G17 »). Ожидается, что удвоение будет иметь коррекцию точности. Но зачем вам это быть объектом, когда тип по умолчанию для него двойной? ' – ViVi

0

Вместо этого вы можете использовать десятичный тип.

decimal propertyValue = 1994.7755474452554M; 
1

Я не может воспроизвести проступка; вы испытали эффект представления: это ToString() помещает double вот так.

string source = "1994.7755474452554"; 

    double d = double.Parse(source, CultureInfo.InvariantCulture); 

    string test = d.ToString("R", CultureInfo.InvariantCulture); 

    Console.Write(source.Equals(test) ? "OK" : "Rounded !!!"); 

Итог: OK. Пожалуйста, обратите внимание "R" формат строки:

круглодонную поездку ("R") Формат Тендерный

https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx#RFormatString

0

Вы можете бросить double в decimal и использовать по умолчанию ToString() так:

Double propertyValue = 1994.77554744526; 
var str = ((decimal)propertyValue).ToString(); 
//str will hold 1994.77554744526