在自定义VB分数代码中舍入小数

时间:2019-03-01 17:49:58

标签: reporting-services

我创建了一个SRSS报告,该报告显示了以十进制表示的高度,宽度和厚度,并且我使用了自定义VB代码将这些十进制转换为分数。我想知道是否可以在自定义VB分数代码中舍入这些小数以获得较小且适当的分数?有什么建议吗?

Function GetFraction(ByVal Num As Double) As String
    If Num = 0# Then
        GetFraction = "None"
    Else
        Dim WholeNumber As Integer
        Dim DecimalNumber As Double
        Dim Numerator As Double
        Dim Denomenator As Double
        Dim a, b, t As Double
        WholeNumber = Fix(Num)
        DecimalNumber = Num - Fix(Num)
        Numerator = DecimalNumber * 10 ^ (Len(CStr(DecimalNumber)) - 2)
        Denomenator = 10 ^ (Len(CStr(DecimalNumber)) - 2)
        If Numerator = 0 Then
            GetFraction = WholeNumber
        Else
            a = Numerator
            b = Denomenator
            t = 0
            While b <> 0
                t = b
                b = a Mod b
                a = t
            End While
            If WholeNumber = 0 Then
                GetFraction = CStr(Numerator / a) & "/" & CStr(Denomenator / a)
            Else
                GetFraction = CStr(WholeNumber) & " " & CStr(Numerator / a) & "/" & CStr(Denomenator / a)
            End If
        End If
    End If
End Function

1 个答案:

答案 0 :(得分:0)

如果您想在转换值之前四舍五入该函数接收到的小数,则可以在引用Round的任何位置添加内置的Num函数。以下内容可用于转换值-第一个参数是您希望取整的值,第二个参数指定小数点后的位数。

Decimal.Round(value,numbersRightOfDecimalPoint)

由于值是Double数据类型,您可能必须使用ToDecimal函数将它们转换为小数。 ToDecimal函数获取转换的值和一种区域文化,我们可以将其设置为Nothing,这样就可以正常显示了。

Convert.ToDecimal(value, culture)

据我所知,您只需要修改引用Num的这两行就可以在整个函数中舍入该值。

 WholeNumber = Fix(Decimal.Round(Convert.ToDecimal(Num,Nothing), 2))
 DecimalNumber = Decimal.Round(Convert.ToDecimal(Num,Nothing),2) - Fix(Decimal.Round(Convert.ToDecimal(Num,Nothing),2))

产生如下结果:

  

.501324532 >> 1/2

编辑:再次查看您的问题时,您似乎可能要将小数转换为与英尺和英寸等度量相关的分数。为此,请参考this link,其中包含您可以根据要求实现的其他功能。

相关问题