gpt4 book ai didi

excel - 从字符串输出格式

转载 作者:行者123 更新时间:2023-12-02 05:40:42 25 4
gpt4 key购买 nike

昨晚我遇到了一些事情,让我发疯了整整十、十五分钟,然后我才弄清楚。但我不明白为什么会这样,所以我希望这里有人能解释一下。

从 VBA IDE 中的立即窗口:

?Format(0.5, "HH:MM AM/PM")
12:00 PM
?Format("0.5", "HH:MM AM/PM")
12:05 AM
?Format(CDbl("0.5"), "HH:MM AM/PM")
12:00 PM

来自this page我发现 0.5 应该对应于 12:00 PM,因为一小时是 0.04166... ((12 * (1/24) = 0.5))。正如您所看到的,如果我向 Format() 传递一个数字,则会发生这种情况,但如果我将相同的数字作为字符串传递,则不会发生这种情况。

根据同一页面的信息,1 分钟为 0.00069444... ((1/(24*60))),这意味着 12:05 AM 应在 Excel 中存储为 0.003472222 ( (0 * (1/24)) + (5 * (1/(24*60))))。事实上:

?Format(0.003472222, "HH:MM AM/PM")
12:05 AM

还有一些我不明白的奇怪之处:<​​/p>

?Format(2.5, "HH:MM AM/PM")
12:00 PM
?Format("2.5", "HH:MM AM/PM")
02:05 AM

但是...

?Format(2.523, "HH:MM AM/PM")
12:33 PM
?Format("2.523", "HH:MM AM/PM")
12:33 PM

我在文档中可以找到的所有内容都表明“时间作为实数的一部分存储。小数点右侧的值代表时间。例如,中午(中午 12:00)用 0.5 表示。” (摘自 Excel 2010 的内置 VBE 术语表)因此 2.5 的结果应为 12:00 PM,因为小数点右侧的部分是 0.52.523 应导致 12:33 PM,因为 0.523 = (12 * (1/24)) + (33 * (1/(24*60)))。但 VBA 仅返回其中之一的正确结果。

那么谁能解释为什么 VBA 表现出不一致的行为?还是我遗漏了一些皱纹?

这已在 Excel 2010 和 2013 中进行了测试。

最佳答案

您期望 Format 将 0.5 转换为 double ,但事实并非如此。根据https://msdn.microsoft.com/en-us/library/ee198964.aspx ,字符串到日期隐式 let 转换进行

  • 如果是日期/时间、时间或日期(按此顺序),请将其转换为日期。
  • 如果它在 Double 的范围内,请将其转换为 Double,然后转换为日期。
  • 如果两者都不是,则返回错误。

由于它没有转换为 double ,因此它必须在第一个项目符号上进行转换。确实如此。假设“0.5”是一个时间。根据https://msdn.microsoft.com/en-us/library/dn528865.aspx ,小数点是有效的时间分隔符。

time-separator = *WSC (":" / ".") *WSC 

关于excel - 从字符串输出格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com