Double ToString - нет научной нотации
Я просто наткнулся на замечательную "функцию", которую .NET по умолчанию будет использовать Double.ToString()
с использованием научной нотации, если будет достаточно десятичных знаков.
.005.ToString() // ".005"
.00005.ToString() // "5E-05"
Кто-нибудь знает эффективный способ заставить это появиться в виде строки в стандартной (ненаучной) нотации?
Я видел этот вопрос, но два первых ответа кажутся мне взломанными, поскольку они оба делают Double.ToString()
, а затем просто переформатируют результаты.
Спасибо за любую помощь.
EDIT:
Желаемый результат:
.00005.ToString() == ".00005"
EDIT2:
Что со всеми дублирующими и закрытыми голосами? Я конкретно говорю в вопросе, что подобный вопрос не имеет удовлетворительного ответа. Люди на этом сайте получают слишком сильную радость.
МОЕ РЕШЕНИЕ:
В случае, если это полезно для всех:
/// <summary>
/// Converts the double to a standard notation string.
/// </summary>
/// <param name="d">The double to convert.</param>
/// <returns>The double as a standard notation string.</returns>
public static String ToStandardNotationString(this double d)
{
//Keeps precision of double up to is maximum
return d.ToString(".#####################################################################################################################################################################################################################################################################################################################################");
}
ПРИМЕЧАНИЕ. Это работает только для значений > 1. Я еще не нашел эффективного способа сделать это для всех значений.
Ответы
Ответ 1
См. Стандарт и Пользовательские строки числового формата. Я думаю, что вы ищете ".################"
:
.00005.ToString(".################") // returns ".00005"
Это несколько хакерский, да, но он работает, если у вас не больше, чем много мест после десятичной. Если вы это сделаете, вы можете использовать StringBuilder
для построения около 330 #
в своей строке (double.Epsilon
имеет порядок E-324).