Как усечь двойник в VBA - PullRequest
0 голосов
/ 31 мая 2018

У меня есть переменная в VBA, которую нужно усечь до 4 значащих цифр.Кажется, я не могу найти ничего, что не округляет число вверх или вниз.Но я просто хочу убрать цифры после 4-й значимой цифры.Я пробовал,

compressibility = round(compress, -3 - (Int(Log(Abs(compress)))))

Удаляет числа после 4-й цифры, но все равно округляет число.

Сжать - это число около 0,000245848385 в качестве примера, и мне нужночисло сжимаемости должно быть 0,0002458.

Любые предложения будут великолепны!Спасибо.

Ответы [ 4 ]

0 голосов
/ 31 мая 2018
Sub test()
Dim compress As Double
compress = 0.000245858

Dim compressibility As Double
compressibility = Int(compress * 10 ^ -(Int(Log(Abs(compress))) - 3)) / 10 ^ -(Int(Log(Abs(compress))) - 3)

Debug.Print compressibility
End Sub
0 голосов
/ 31 мая 2018

Попробуйте эту функцию:

Function RoundSignificant(ByVal dValue As Double, iFigures As Integer)
    Dim dSig As Double
    dSig = Abs(dValue)
    dSig = Application.Log10(dSig)
    dSig = 1 + Int(dSig)
    dSig = iFigures - dSig
    RoundSignificant = Round(dValue, dSig)
End Function


Sub test()
    Debug.Print RoundSignificant(0.000245848385, 4)
End Sub
0 голосов
/ 31 мая 2018

Мне кажется, что вы хотите избежать округления вверх, но не округления вниз, поскольку округление вниз должно дать именно тот результат, который вы хотите.Таким образом, вместо использования функции VBA Round , вы можете использовать метод Excel WorksheetFunction.RoundDown для достижения необходимого результата.

ROUNDDOWN (0,0002458 6 *)1008 * 548385; 7) = 0,000245800000 КРУГЛЫЙ ВОД (0,0002458 3 548385; 7) = 0,000245800000

0 голосов
/ 31 мая 2018

Использование функций рабочего листа:

=VALUE(TEXT(compress,"0.000E+00"))

Для VBA

CDbl(Format(compress,"0.000E+00"))

Надеюсь, это поможет.

...