LibreOffice 中的 100 毫米到缇
100mm to twips in LibreOffice
我一直在阅读一些 LibreOffice 代码,还有 code that converts from 100mm to twips。
其基本公式为:
twips = (n>=0) ? (n*72+63) / 127 : (n*72-63) / 127;
现在我知道一缇是1/20分,一英寸是72分,1英寸是2.54厘米,但是我不知道上面的公式和这些比例有什么关系!
任何人都可以阐明这一点吗?
将 OP 提供的内容放在一起:
n
是以 100 毫米为单位的尺寸。
1 英寸是 2.54 厘米是 25.4 毫米。
inchs = n * 100 / 25.4
或 inchs = n / (100 * 25.4)
或 inchs = n / 2540
1 英寸是 72 磅。
points = inchs * 72
1 twip
是 1/20 点。
twips = points / 20
现在,一切都在一起了:
twips = n / 2540 * 72 / 20
或 twips = n * 72 / 2540 / 20
或 twips = n * 72 / 127
如果这是在 int
算术中完成的,将会有截断而不是数学舍入。这可以通过将 127 (127 / 2 = 63
) 的一半添加到 n * 72
:
来解决
twips = (n * 72 + 63) / 127
这不能正确处理负数。对于这些,必须减去 63:
twips = n >= 0 ? (n * 72 + 63) / 127) : (n * 72 - 63) / 127;
我们到了。
正如 Ron, the ?:
operator is the ternary if-then-else operator 所指出的那样。
更容易阅读(但可能优化程度较低)的替代方法是:
if (n >= 0) twips = (n * 72 + 63) / 127);
else twips = (n * 72 - 63) / 127;
我一直在阅读一些 LibreOffice 代码,还有 code that converts from 100mm to twips。
其基本公式为:
twips = (n>=0) ? (n*72+63) / 127 : (n*72-63) / 127;
现在我知道一缇是1/20分,一英寸是72分,1英寸是2.54厘米,但是我不知道上面的公式和这些比例有什么关系!
任何人都可以阐明这一点吗?
将 OP 提供的内容放在一起:
n
是以 100 毫米为单位的尺寸。
1 英寸是 2.54 厘米是 25.4 毫米。
inchs = n * 100 / 25.4
或 inchs = n / (100 * 25.4)
或 inchs = n / 2540
1 英寸是 72 磅。
points = inchs * 72
1 twip
是 1/20 点。
twips = points / 20
现在,一切都在一起了:
twips = n / 2540 * 72 / 20
或 twips = n * 72 / 2540 / 20
或 twips = n * 72 / 127
如果这是在 int
算术中完成的,将会有截断而不是数学舍入。这可以通过将 127 (127 / 2 = 63
) 的一半添加到 n * 72
:
twips = (n * 72 + 63) / 127
这不能正确处理负数。对于这些,必须减去 63:
twips = n >= 0 ? (n * 72 + 63) / 127) : (n * 72 - 63) / 127;
我们到了。
正如 Ron, the ?:
operator is the ternary if-then-else operator 所指出的那样。
更容易阅读(但可能优化程度较低)的替代方法是:
if (n >= 0) twips = (n * 72 + 63) / 127);
else twips = (n * 72 - 63) / 127;