【问题标题】:Is there a MulDiv function for cross platform usage?是否有用于跨平台使用的 MulDiv 功能?
【发布时间】:2013-02-25 03:49:44
【问题描述】:

谁能帮我找到一个单元,它定义了 Delphi XE3 中的MulDiv 函数以供跨平台使用?它的原型是在 Windows 单元中定义的(通常),在 OSX 下显然不能工作。

Delphi XE3 中是否有MulDiv 跨平台使用功能?

【问题讨论】:

    标签: delphi cross-platform delphi-xe3


    【解决方案1】:

    没有跨平台使用的MulDiv函数,只有从Windows导入的那个。所以,如果你需要,你需要自己为不同的平台制作这样的功能。例如 Lazarus 为此使用类似的代码:

    function MathRound(AValue: Extended): Int64; inline;
    begin
      if AValue >= 0 then
        Result := Trunc(AValue + 0.5)
      else
        Result := Trunc(AValue - 0.5);
    end;
    
    function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer;
    begin
      if nDenominator = 0 then
        Result := -1
      else
        Result := MathRound(Int64(nNumber) * Int64(nNumerator) / nDenominator);
    end;
    

    来源lcltype.pp 单元和问题#0009934

    【讨论】:

    • 我有一种感觉,Java(我正在做 Android 的东西)制作了类似于 MulDiv 的东西(与 Java 文化非常一致)。我在 Android Java 中的打印像素计算与在 Win32 C 中类似,我在 Win32 C 中使用 MulDiv 得到相同的结果,否则没有(我喜欢打印的页面看起来差不多)。 Java是如何进行这样的计算的,知道会很有趣吗?事实上,如果有人对不同的平台/编程语言进行了研究,阅读起来会很有趣吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2014-05-13
    • 2021-11-03
    • 1970-01-01
    • 2015-07-04
    • 2021-05-24
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多