2024年5月15日 星期三

SQL 十進位轉分數

取最大公因數 

Create FUNCTION dbo.GCD(@a INT, @b INT)
RETURNS INT
AS
BEGIN
    --最大公因數
    WHILE @b != 0
    BEGIN
        DECLARE @temp INT;
        SET @temp = @b;
        SET @b = @a % @b;
        SET @a = @temp;
    END
    RETURN @a;
END;

十進位轉分數

Create function dbo.DecimalToFraction (@decimal_value DECIMAL(18, 2))
returns NVARCHAR(50) AS
BEGIN
    DECLARE @whole_part INT;
    DECLARE @fraction_part DECIMAL(18, 2);
    DECLARE @numerator INT;
    DECLARE @denominator INT;
    DECLARE @gcd_value INT;
    DECLARE @fraction_string NVARCHAR(50);

    -- 取得整數部分和小數部分
    SET @whole_part = FLOOR(@decimal_value);
    SET @fraction_part = @decimal_value - @whole_part;
    -- 初始分母为100,以处理小数部分的十分位
    SET @denominator = 100;

    -- 将小数部分转换为分数的分子  0.75 * 100
    SET @numerator = @fraction_part * @denominator;

    -- 确保分子和分母为整数
    SET @numerator = ROUND(@numerator, 0);
    SET @denominator = ROUND(@denominator, 0);

    -- 求分子和分母的最大公因数
    SET @gcd_value = dbo.GCD(@numerator, @denominator);
    WHILE @gcd_value > 1
    BEGIN
        SET @numerator = @numerator / @gcd_value;
        SET @denominator = @denominator / @gcd_value;
        SET @gcd_value = dbo.GCD(@numerator, @denominator);
    END;

    -- 将整数部分和分数部分组合成分数形式
    if @numerator<>0
    begin
      SET @fraction_string = CONCAT(@whole_part, '-', @numerator, '/', @denominator);
    end
    else
    begin
      SET @fraction_string = @whole_part
    end

    return @fraction_string;
END;

SQL 英呎轉分數

取最大公因數

Create FUNCTION dbo.GCD(@a INT, @b INT)
RETURNS INT
AS
BEGIN
    --最大公因數
    WHILE @b != 0
    BEGIN
        DECLARE @temp INT;
        SET @temp = @b;
        SET @b = @a % @b;
        SET @a = @temp;
    END
    RETURN @a;
END;


英吋轉分數

Create function dbo.FeetToFraction (@decimal_value DECIMAL(18, 2))
returns NVARCHAR(50) 
AS
BEGIN
    --英呎轉分數
    declare @Int int;
    DECLARE @whole_part DECIMAL(18, 2);
    DECLARE @fraction_part DECIMAL(18, 2);
    DECLARE @numerator DECIMAL(18, 2);
    DECLARE @denominator DECIMAL(18, 2);
    DECLARE @gcd_value DECIMAL(18, 2);
    DECLARE @fraction_string NVARCHAR(50);

    -- 取得整數部分和小數部分
SET @Int = FLOOR(@decimal_value); --整數
    SET @fraction_part = @decimal_value - @Int; --小數

    -- 初始分母為16
    SET @denominator = 16;

    -- 將小數部份乘以 0.75 * 12
    SET @numerator = @fraction_part * 12;

    -- 取相乘後的整數
    SET @whole_part = FLOOR(@numerator); --整數
    SET @fraction_part = @numerator - @whole_part; --小數
    Set @fraction_part = FLOOR(@fraction_part * @denominator)

    -- 求分子和分母的最大公因数
    SET @gcd_value = dbo.GCD(@fraction_part, @denominator);
    WHILE @gcd_value > 1
    BEGIN
        SET @fraction_part = @fraction_part / @gcd_value;
        SET @denominator = @denominator / @gcd_value;
        SET @gcd_value = dbo.GCD(@fraction_part, @denominator);
    END;

    -- 組合成分數
    if convert(int, @fraction_part) <> 0 
    begin
      SET @fraction_string = CONCAT(@Int, ''' ' ,
  convert(int, @whole_part), '-', 
    convert(int, @fraction_part), '/', convert(int, @denominator),'"');
    end
    else
    begin
      SET @fraction_string = CONCAT(@Int, ''' ' ,
  convert(int, @whole_part), '"');
    end
    
    Return @fraction_string;
END;

2024年5月14日 星期二

DBGrid FixedCols Selution

 DBGrid FixedCols Selution


type
  TFixDBGrid = class(TDBGrid)
protected
  function  SelectCell(ACol, ARow: Longint): Boolean; Override;
public
  property FixedCols;
end;
...
...
function TFixDBGrid.SelectCell(ACol, ARow: Longint): Boolean;
Begin
     Result := Inherited SelectCell(ACol, ARow);
     If ACol < FixedCols Then
        Result := False;
End;
...
...


參考轉: https://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00715.html

2024年5月6日 星期一

蟾宮折桂

 蟾宮折桂

蟾宮,指月亮。折桂,比喻科舉及第。參見「折桂」條。蟾宮折桂相傳月中有桂樹,用以比喻科舉登第。元.施惠《幽閨記》第一一齣:「胸中書富五車,筆下句高千古,鎮朝經暮史,寐晚興夙,擬蟾宮折桂雲梯步。」《孽海花》第五回:「舉人是月宮裡管的,祇要吳剛老爹修桂樹的玉斧砍下一枝半枝,肯賜給我們爺,我們爺就可以中舉,名叫蟾宮折桂。」


https://dict.idioms.moe.edu.tw/idiomView.jsp?ID=11566&webMd=2&la=0