【问题标题】:VBA very Long integerVBA 非常长的整数
【发布时间】:2014-02-02 20:31:28
【问题描述】:

我需要找到一种将 19 位整数(比例为 9 × 10^18)放入 Word 文档的方法。问题是它需要在 32 位机器上运行,所以 LongLong 数据类型不起作用。

试图拆分成一个字符串数组,但这也不起作用,因为我需要在之后对其进行计算

如何解决这个问题?

【问题讨论】:

  • 试试Double 而不是Long
  • 您需要将数字作为字符串处理 - VBA 仅支持 15 位精度,因此您将丢失一些信息。
  • 如果您需要进行计算,请参见此处,例如:tushar-mehta.com/misc_tutorials/project_euler/…
  • 你做错了。 EAN 代码是字符串,而不是数字。您使用数字进行数学运算,没有人将 EAN 代码相乘。
  • 我不乘以 EAN 代码,我使用计算来获得总代码的最后 5 位数字(附加),但我找到了一个示例,如何在第一个中拆分字符串13 个字符和最后 5 个字符,感谢您的提示

标签: vba 32-bit unsigned-long-long-int


【解决方案1】:

如果您只需要最后五位数字并且您需要将它们作为数字,则可以使用如下代码:

Dim sEan As String
Dim lLastFive As Long

sEan = "90000000000000012345"
lLastFive = CLng(Right$(sEan, 5))

Debug.Print lLastFive, TypeName(lLastFive)

你应该得到

 12345        Long

【讨论】:

  • 非常感谢,这正是我需要的代码,即使最后五个数字中的第一个是 0 也没有写我非常感谢您
【解决方案2】:

像您提供的示例这样的大数字将适合 Double 类型:

Sub Test()
Dim num As Double
Dim lon As Long

num = 9 * 10 ^ 18  '## This should work

lon = 9 * 10 ^ 18  '## This will raise an error.

End Sub

【讨论】:

  • 我不确定,它会通过 9E+18 而不是 900000000000...000,我相信这是 OP 需要的。
  • 它将“适合”,但 VBA 不是只管理 15 位精度吗?因此,超过 15 位的数字可能无法正确表示。
  • 试过了,但不是我需要的解决方案代码返回了这个输出(8.01673891020201E+17 用于 tis 变量 801673891020201403 我需要完整的数字,因为它是一个带有 5 位数插件的 EAN 代码
  • @Efratror Tim 和 Kazjaw 关于 VBA 中允许的小数精度是正确的。请参阅THIS LINK,这可能对您的特定问题有用。
  • 我找到了同一个页面,但无法让它工作,但现在我将使用字符串拆分方法click here
猜你喜欢
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 2021-09-25
  • 1970-01-01
  • 2011-01-10
  • 2010-10-23
相关资源
最近更新 更多