【问题标题】:Elegant way to convert units Centimeters (Cm) to Meters (m) and Vice Versa将单位厘米 (Cm) 转换为米 (m) 和反之亦然的优雅方式
【发布时间】:2019-08-07 14:04:34
【问题描述】:

我期待一种方法来开发一种优雅的方式来将 Cm 转换为 Meter,反之亦然,而不使用 IF 条件或 Select Case,仅适用于布尔类型。 这些“tmp”变量操作将以一种优雅的方式进行,当值已经在 Meters 中时不会改变。

MyVariable
tmp= Not(MyVariable>100)
tmp= (MyVariable*tmp)/100 '(Converting to meters in case the Value is in Cm)

【问题讨论】:

  • if 有什么不好?
  • tmp = MyVariable if MyVariable <= 100 else MyVariable / 100
  • 这个想法没有使用 IF 或 Select Case。
  • 除了模糊使用 tmpvariable 和不同的类型分配(首先是布尔值,然后是数字)之外,还不清楚如何仅通过 ist 数值区分米和厘米。按照您的逻辑,您从计算中完全 排除 数字 大于 100,因为 tmp 将是 False 从而导致 乘法和结果0 的(即使不是这样,也不清楚您期望有效的仪表输入如何)。此外,为您的 cm 指示(即 True 的 tmp 变量具有 -1 的值,因此会导致可能不需要的 negative 结果:-)

标签: excel vba boolean


【解决方案1】:

这不是好坏的问题。它正在寻找/开发不同的方法来达到结果。有时优雅有时优化。

Sub ToggleTrueOrFalseSlower()
 Dim bYesNo As Boolean

 If bYesNo = False Then
  bYesNo = True
 Else
  bYesNo = False
 End If
End Sub

Sub ToggleTrueOrFalseFaster()
 Dim bYesNo As Boolean
 bYesNo = Not bYesNo
End Sub

【讨论】:

  • 这如何回答(非常广泛的)问题?
【解决方案2】:

伙计们,我想我可以用这个来解决。现在只有数字除以零是问题。

tmp=(10)^(2*(MyVariable>100))

你们觉得呢?查看示例代码:

Function BMI(W As Double, H As Double)
  Dim tmp As Double
  tmp = (W * H) > 0
  tmp = tmp * ((10) ^ (2 * (H > 100)) * H)
  BMI = Round(W / (tmp ^ 2), 1)
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2023-02-04
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多