Есть ли способ округлить, скажем, до 3 значащих цифр в .net (особенно f #) ДО десятичной точки? - PullRequest
3 голосов
/ 07 июля 2011

В Excel вызов функции "= round (12345, -3)" преобразуется в "12000". То есть параметр округления -3 позволяет применять значащие цифры перед десятичной точкой.

Кто-нибудь знает простой способ (то есть существующий вызов библиотеки, а не написание пользовательской функции деления / округления / умножения) сделать это в f #?

Math.Round (12345, -3) завершается ошибкой, поскольку второе значение в кортеже должно быть положительным.

Ответы [ 3 ]

4 голосов
/ 07 июля 2011

Вы можете использовать стандартную строку формата "G" , чтобы указать количество значащих цифр. Например:

String.Format("{0:G3}", value)

Очевидно, это дает вам строку в качестве вывода. Может быть, это то, что вы собирались сделать с ним в любом случае, или, если нет, вы можете преобразовать его обратно в число с Int32.Parse() или аналогичным.

Существует также ответ на этот вопрос , который, хотя в C # должен быть довольно простым для преобразования, поскольку это все вызовы метода .NET Framework.

1 голос
/ 26 декабря 2011

Это был бы мой подход.возможно, не самый лучший для всех.Также фактически округляет число, а не строковый формат.

// Функция округления, которая требует значительного числа цифр (sF)

let roundToSigFigs(x : float, sigFigs : byte) = 
    let absx = System.Math.Abs(x)
    System.Math.Round(0.5 + System.Math.Log10(absx))
    |> fun c -> float(c)-float(sigFigs)
    |> fun d  -> System.Math.Round(absx * 10.0**(-d)) * 10.0**d
    |> fun a -> a * float(System.Math.Sign(x))
0 голосов
/ 07 июля 2011

Лука Болоньезе реализовал все финансовые функции Excel в F # .Скорее всего, это включает функцию округления, которую вы хотели бы использовать, с тем же поведением, что и в Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...