在excel中,函数调用“= round(12345,-3)”将解析为“12000”。也就是说,-3舍入参数允许在小数点之前应用有效数字。
有没有人知道一种简单的方法(即现有的库调用而不是编写自定义除法/舍入/乘法函数)来在f#中执行此操作?
Math.Round(12345,-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相同。