我爸爸对占星术很感兴趣,所以他需要做一些计算——大多数书都使用度分秒非计量单位- 有没有办法设置 excel 或 open office calc 来处理 DMS 方面的计算?
编辑:我们目前正在使用 excel 2007
编辑2:我怀疑安装 open office / libre office 是一种选择,而且可能没有 MS Excel 的方式来做到这一点 - 所以我扩大了问题,Office 2007 是首选,但几乎任何常见的 Windows 电子表格都可以
编辑 3:显然,使用时间作为解决方法不允许乘法 - 在这种情况下这是必需的
答案1
开箱即用的 Excel 不支持您要求的功能。可能有一些插件可以帮助解决这个问题,但我想提供一个解决方法:
您可以将数字格式化为时间,以便 Excel(可能还有 OOo 和 LibreOffice)使用正确的除法、基数等显示和计算您需要的值。
使用以下自定义格式(Excel、OOo 和 LibreOffice 都有等效格式,但我手头没有副本可以测试)也会使用正确的符号呈现它们。这可以[h]
防止小时在达到 24 时重置为零,从而允许任意大的角度。如果您想要前导零,则只需将每个字母加倍即可。
[h]º m' s\"
可以根据需要将它们加在一起等等(毕竟,它们只是下面的数字)。然而,这只有在最终结果为正时才有效;Excel不会 将 呈现负面时代。
如果您需要将该值转换为十进制度值,则只需乘以 24,因为 Excel 时间格式中的“天”的值为 1(因此一小时是 1/24,等等)。
只需确保此公式所在的单元格具有正常格式 - 而不是时间:
=A1*24
或者,您也可以使用以下命令从时间值中提取特定成分:
=INT(A1*24) returns degrees
=MINUTE(A1) returns minutes
=SECOND(A1) returns seconds
答案2
以下是两个宏,它们可以完成我的天文学电子表格的工作。方向值(度、分、秒)被格式化为文本。如果单元格 A1 包含-77° 26' 09.5"
,我可以=DMS2Real(A1)
在单元格 A2 中输入,然后会显示 -77.4359722222
。A3=Real2DMS(A2)
中的转换将反转。
通过输入宏函数工具 > 宏 > 组织宏 > LibreOffice Basic > 标准(或者您想要存储它们的任何地方)。
请注意,十进制度不是三角函数所需的弧度值。
' Convert degrees, minutes, seconds to a single real number and back.
' Tested in LibreOffice Calc 5.1.6.2
' Based on https://support.microsoft.com/en-gb/help/213449/how-to-convert-degrees-minutes-seconds-angles-to-or-from-decimal-angle
Function DMS2Real(Degree_DMS As String) As Double ' -77° 26' 09.5" -> -77.4359722222
' use double precision floating-point.
Dim degrees As Double
Dim minutes As Double
Dim seconds As Double
Dim sign As Integer
' Set degree to value appearing before "°" in argument string.
degrees = Val(Left(Degree_DMS, InStr(1, Degree_DMS, "°") - 1))
' Only positive value is computed. Sign of result is changed in final statement
' i.e. -7° 8' 9" means (-7 - 8/60 - 9/3600)
If degrees < 0 Then
degrees = degrees * -1
sign = -1
Else
sign = 1
End If
' Set minutes to the value between the "°" and the "'"
' of the text string for the variable Degree_Deg divided by 60.
' The Val function converts the text string to a number.
minutes = Val(Mid(Degree_DMS, InStr(1, Degree_DMS, "°") + 2, InStr(1, Degree_DMS, "'") - InStr(1, Degree_DMS, "°") - 2)) / 60
' Set seconds to the number to the right of "'" that is
' converted to a value and then divided by 3600.
seconds = Val(Mid(Degree_DMS, InStr(1, Degree_DMS, "'") + 2, Len(Degree_DMS) - InStr(1, Degree_DMS, "'") - 2)) / 3600
DMS2Real = sign * (degrees + minutes + seconds)
End Function
Function Real2DMS(dms) ' -77.4359722222 -> -77° 26' 9.5"
DIM sign As String
' allow for negative values
If dms < 0 Then
dms = dms * -1
sign = "-"
Else
sign = " "
End If
'Set degree to Integer of Argument Passed
Degrees = Int(dms)
'Set minutes to 60 times the number to the right
'of the decimal for the variable Decimal_Deg
Minutes = (dms - Degrees) * 60
'Set seconds to 60 times the number to the right of the
'decimal for the variable Minute
Seconds = Format(((Minutes - Int(Minutes)) * 60), "0.0")
'Returns the Result of degree conversion
'(for example, 10.46 = 10~ 27 ' 36")
Real2DMS = sign & Degrees & "° " & Int(Minutes) & "' " & Seconds + Chr(34)
End Function
Sub Main
End Sub
答案3
在使用以下函数时,没有办法告诉 Excel 在弧度和度之间切换
=SIN(DEGREES)
因此你要么必须在每个公式中进行显式转换,例如
=SIN(RADIANS(DEGREES + MINUTES/60 + SECONDS/3600))
或者你可以在 VBA 中创建自定义公式,例如
Function SinDMS(Deg As Double, Min As Double, Sec As Double) As Double
SinDMS = Sin((3.1415 * 2 * (Deg + Min / 60 + Sec / 3600)) / 360)
End Function
(但如果计算量很大的话就会比较慢)
答案4
在 Excel 中以度为单位进行计算,然后使用公式将答案转换为度、分和秒(在单元格 A3 中设置输入角度):
=+FLOOR(A3,1)&" deg "&FLOOR((A3-(FLOOR(A3,1)))*60,1)&" min "&ROUND((((A3-(FLOOR(A3,1)))*60)-FLOOR((A3-(FLOOR(A3,1)))*60,1))*60,0)&" sec"