有人能给我一个简单的方法来找出双倍小数点后的数字吗? 我需要做的就是找出数字是否以0结尾,如1.0或10.0或323.0?
你对此有什么想法吗?
答案 0 :(得分:3)
你的意思是:
if (x == Math.Floor(x))
?请注意,通常使用二进制浮点运算,您希望具有某种容差,因此10.000001被视为“非常接近10”。例如:
if (x - Math.Floor(x) < Tolerance)
{
...
}
答案 1 :(得分:3)
只需使用Mod
运算符,如下所示:
If (x Mod 1) = 0 Then
' Do some stuff
End If
(见http://en.wikibooks.org/wiki/Visual_Basic_.NET/Arithmetic_operators)
答案 2 :(得分:3)
你需要做的是乘以10然后再乘以10。
例如。比方说x = 10.2
temp = x * 10'temp等于102
temp = temp%10'应返回2. Temp现在是您需要的小数值。
这也适用于负值。
如果您需要进行比较以查看它是否为0,您所做的只是将您的temp var与0进行比较。
答案 3 :(得分:2)
如果您使用任何数字数据类型(例如,double,single,integer,decimal),则不能将10.0和10表示为两个不同且不同的值。没有办法做到这一点。如果你需要保留数字的尾数,即使它是零,你也必须将值存储为其他数据类型,如字符串。
要验证已输入的字符串,您可以执行以下操作:
Public Function MantissaIsZero(ByVal value As String) As Boolean
Dim result As Boolean = False
Dim parts() As String = value.Split("."c)
If parts.Length = 2 Then
Dim mantissa As Integer = 0
If Integer.TryParse(parts(1), mantissa) Then
result = (mantissa = 0)
End If
End If
Return result
End Function
答案 4 :(得分:1)
尝试此功能:
Function CalculateDecimals(input As Double)
Dim positiveInput As Double
positiveInput = Math.Abs(input)
Return positiveInput - Math.Floor(positiveInput)
End Function
它会显示您要查找的小数。
以这种方式使用它:
If (Math.Abs(CalculateDecimals(yourNumber))<0.00001) Then ...
答案 5 :(得分:1)
如果您的输入是一个字符串,并且您想要识别具有小数的字符串,但这些小数位数都为零,那么您可以使用正则表达式:
var regex = new Regex("^-?\\d+\\.0+$");
if (new Regex.IsMatch(input))
{
// it's in the format you want
}
答案 6 :(得分:0)
这是你可以尝试的东西。将double转换为int将删除小数位。然后你可以对相同的数字进行Mod操作,得到的余数等于小数位。
(double)(4.9 % (int)(4.9))
答案 7 :(得分:0)
已经有一段时间了,不过我的解决方案是:
我也使用了mod函数,但你必须要小心,因为有精确的&#34;问题&#34;使用数据类型&#39; Double&#39;:
Dim numberDbl As Double = 1.2
Dim modValDbl As Double = 1.0
Dim remValDbl As Double = numberDbl Mod modValDbl
'remValDbl = 0.19999999999999996 -> not 100% precise
Dim numberDec As Decimal = 1.2D
Dim modValDec As Decimal = 1D
Dim remValDec As Decimal = numberDec Mod modValDec
'remValDec = 0.2 -> correct
因此我写了这个函数:(例如:number = 1.25)
一旦两个值匹配(即:25 = 25),我可以使用 remVal 和乘数
返回我的小数值Public Shared Function getDecimalPlaces(number As Double) As Double
Dim modVal As Integer = CInt(If(Math.Truncate(number) = 0, 1, Math.Truncate(number)))
Dim remVal As Decimal = CDec(number) Mod modVal
Dim retVal As Double = 0
Debug.WriteLine("modVal: " + modVal.ToString)
Debug.WriteLine("remVal: " + remVal.ToString)
Dim multiplier As Decimal = 1
While remVal * multiplier <> Math.Truncate(remVal * multiplier)
Debug.WriteLine("remVal * multiplier <> Math.Truncate(remVal * multiplier): " + (remVal * multiplier).ToString + " <> " + (Math.Truncate(remVal * multiplier)).ToString)
multiplier *= 10
Debug.WriteLine("remVal * multiplier <> Math.Truncate(remVal * multiplier): " + (remVal * multiplier).ToString + " <> " + (Math.Truncate(remVal * multiplier)).ToString)
End While
retVal = CDbl(remVal * multiplier)
Debug.WriteLine("remVal: " + remVal.ToString)
Debug.WriteLine("multiplier: " + multiplier.ToString)
Debug.WriteLine("retVal: " + retVal.ToString)
Return retVal
End Function
'Output with number = 1.25
'modVal: 1
'remVal: 0,25
'remVal * multiplier <> Math.Truncate(remVal * multiplier): 0,25 <> 0 -> true
'remVal * multiplier <> Math.Truncate(remVal * multiplier): 2,50 <> 2 -> true
'remVal * multiplier <> Math.Truncate(remVal * multiplier): 2,50 <> 2 -> true
'remVal * multiplier <> Math.Truncate(remVal * multiplier): 25,00 <> 25 -> false: exit while
'remVal: 0,25
'multiplier: 100
'retVal: 25