2014-01-27 4 views
1

У меня есть следующая переменная. Мне нужно найти количество чисел до десятичной точки и после десятичной точки.Найти количество значений до и после символа

Dim x As Long = 123.456 

Я попытался преобразовать это в строку

Dim xstr As String = x.ToString(x) 
    Dim searchChar As String = "." 

Как я могу отобразить количество символов до десятичной точки. i.e. '3'

а также количество символов после десятичной точки. '3'.

+0

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+1

Я уверен, что десятичные знаки неявно усекаются, когда вы назначаете их 'Long'. Вероятно, это вызывает у вас проблемы. –

+0

Справа. 'x' должен быть' Float', 'Double' или' Decimal'. И вы должны называть 'x.ToString()' без параметров, в отличие от 'x.ToString (x)'. –

ответ

2

Вы можете позвонить String.Split, например:

Dim x As Double = 123.456 
Dim xstr As String = x.ToString() 
Dim searchChar As String = "." 
Dim parts() As String = xstr.Split({searchChar}, StringSplitOptions.None) 
Dim firstLength As Integer = parts(0).Length 
Dim secondLength As Integer = parts(1).Length 
+0

Привет, код, похоже, не позволяет мне использовать searchChar в качестве атрибута .xstr.Split. – LyanR

+0

К сожалению. Сожалею. Я обновил свой ответ. –

+0

Не удастся, если скомпилирован ... будет ли этот код после того, как я преобразую целое число в строку? – LyanR

0

в пути:

xstr.Substring(xstr.IndexOf("."c) + 1) 

Но вам не нужно преобразовать в строку.

Dim y = x Mod 1 
+1

Или 'Math.Truncate' –

1

Другим возможным решением, на основе String.Substring():

Dim x As Double = 123.456 

Dim xstr As String = x.ToString(NumberFormatInfo.InvariantInfo) 

Dim beforeDecimalSeparator As Integer = xstr.Length 

Dim afterDecimalSeparator As Integer = 0 

Dim decimalSeparatorPosition As Integer = xstr.IndexOf("."c) 

If decimalSeparatorPosition > -1 Then 

    beforeDecimalSeparator = xstr.Substring(0, decimalSeparatorPosition).Length 

    afterDecimalSeparator = xstr.Substring(decimalSeparatorPosition + 1).Length 

End If 
+0

Должно быть только 'beforeDecimalSeparator = decimalSeparatorPosition' и' afterDecimalSeparator = xtr.Length - decimalSeparatorPosition - 1'. –

+0

Но тогда он не основан на подстроке: c –

+0

Тогда скажите, что он основан на 'IndexOf' :) –

0

Вы также можете использовать IndexOf, чтобы решить эту проблему.

Dim x As Double = 123.456 
Dim xstr As String = x.ToString() 
Dim mIndex As Integer = xstr.IndexOf(".") 
Dim firstLength As Integer = mIndex; 
Dim secondLength As Integer = (xstr.Length - mIndex) -1 
Смежные вопросы