有没有办法在.net(特别是f#)小数点之前将3个有效数字舍入到?

时间:2011-07-07 09:53:58

标签: .net math f#

在excel中,函数调用“= round(12345,-3)”将解析为“12000”。也就是说,-3舍入参数允许在小数点之前应用有效数字。

有没有人知道一种简单的方法(即现有的库调用而不是编写自定义除法/舍入/乘法函数)来在f#中执行此操作?

Math.Round(12345,-3)失败,因为元组中的第二个值必须为正。

3 个答案:

答案 0 :(得分:4)

您可以使用"G" standard format string指定有效位数。例如:

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

显然这会给你一个字符串作为输出。也许这就是你要用它做什么,或者如果没有,你可以将它转换回Int32.Parse()或类似的数字。

还有this question的答案,虽然在C#中转换起来应该相当简单,因为它是所有.NET Framework方法调用。

答案 1 :(得分:1)

这将是我的方法。可能不是每个人都最好的。实际上也是将数字舍入而不是字符串格式。

//采用有效数字计数(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))

答案 2 :(得分:0)

Luca Bolognese实施了所有Excel financial functions in F#。这可能包括您要使用的舍入功能,其行为与Excel相同。