如何在VB.NET中获取双精度数字逗号后的位数?

如何在VB.NET中获取双精度数字逗号后的位数?,vb.net,double,Vb.net,Double,示例: 双精度数字为56.6789,结果应为4 双精度数字为12345.67。结果应为2 双精度数字为12345.6。结果应为1 我有一个解决办法来修补字符串,但我认为有一个数学解决办法 请在VB.NET中…拆分原始编号并获取上索引(1)的长度 编辑:将“.”替换为十进制分隔符,以确保跨不同的区域性使用您可以这样尝试: Dim x As String = CStr(56.6789) Dim count = x.Length - InStr(x, ".") 一种方法是将整个部分去掉,乘以10,

示例:

双精度数字为56.6789,结果应为4

双精度数字为12345.67。结果应为2

双精度数字为12345.6。结果应为1

我有一个解决办法来修补字符串,但我认为有一个数学解决办法


请在VB.NET中…

拆分原始编号并获取上索引(1)的长度


编辑:将“.”替换为十进制分隔符,以确保跨不同的区域性使用

您可以这样尝试:

Dim x As String = CStr(56.6789)
Dim count = x.Length - InStr(x, ".")

一种方法是将整个部分去掉,乘以10,然后重复,直到得到一个整数:

Dim x As Double = 1.23456
Dim count As Integer = 0
While Math.Floor(x) <> x
    x = (x - Math.Floor(x)) * 10D
    count = count + 1
End While
使用
Application.DecimalSeparator
还允许使用字符串


带有字符串的方法将再次丢失关于无限长小数部分的信息,因为它将截断它。

将其转换为字符串,然后使用子字符串和长度来查找答案。对于双精度,例如(1/3),您希望发生什么情况,哪里会有无限多的数字?这不是文化-specific@simonalexander2005OP并没有要求这样做,但正如你所指出的,我会改变它。这不是特定于文化的
Dim x As Double = 1.23456
Dim count As Integer = 0
While Math.Floor(x) <> x
    x = (x - Math.Floor(x)) * 10D
    count = count + 1
End While
Dim x As Double = 1.23456
Dim x0 As Double = x - Math.Floor(x)
Dim x0String As String = x0.ToString()
Dim count As Integer = x0String.Substring(2, x0String.Length - 2).Length