我创建了一个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
答案 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,其中包含您可以根据要求实现的其他功能。