「1.5」年前を指定したいNo.08108
styth さん 21/05/04 08:56
 
$n = input("何年前まで表示しますか?\n年数を入力して下さい。", "1.5");
$n = filter( "", "ToHankaku", "", $n );
if ( !result ) endmacro;

if ( rightstr($n, 2) == ".5" )
 $days = str(val($n)*-365 - 180);
else $days = str(val($n)*-365);

$date = dllfuncstr("CurrentDate");
$date = dllfuncstr("ShiftDate", $date, $days);
$ym   = dllfuncstr("FormatDate", $date, "YY.MM");

 上記の様に「1.5」年前を指定したいのですが、小数点が計算できていないので、
こうしています。

 浮動小数点数バージョンで、以下を試しても、うまくいきません。
message str(val("1.5"));

 月数*30、でやれば良いのかもしれませんが、ほかに何か良い方法はないでしょうか?
 要望として、valで小数点が使えるようにして頂けないでしょうか?
 秀丸エディタのソート機能では、小数点もマイナスも考慮されていています。
 よろしくお願いいたします。
 使っている場面は、秀丸エディタの方です。

[ ]
RE:08108 「1.5」年前を指定したいNo.08109
Iranoan さん 21/05/04 14:11
 
styth さんこんにちは、Iranoan です
>  浮動小数点数バージョンで、以下を試しても、うまくいきません。
> message str(val("1.5"));
setfloatmode 1;
をしていますか?

個人で使うなら、上記をした上で浮動小数点版を使うのが最も手っ取り早いと思います

浮動小数点数版を使わないのであれば、一度適当な倍率をかけた後、最後にその倍率
で割ってやればよいでしょう
//----------------------------------------------------------------------
$n = "1.45";

call prod "365", $n, 1000;
message(str(##return));
endmacro;

prod:
  //$$1, $$2 掛け算の用いる数字の文字列表現
  //$$2 のみ小数の文字列表現対応
  //##3 適当な倍率
  ##p = strstr($$2, ".");
  if(##p == -1){
    ##n = val($$2) * ##3;
  }
  else{
    $$n2 = leftstr(rightstr($$2, strlen($$2) - ##p - 1), strlen(str(##3)) - 1);
    ##n1 = strlen(str(##3)) - 1;
    ##n2 = strlen($$n2);
    while(##n2 < ##n1){
      $$n2 = $$n2 + "0";
      ##n2 = ##n2 + 1;
    }
    ##n2 = val($$n2);
    ##n1 = val(leftstr($$2, ##p));
    ##n = ##n1 * ##3 + ##n2;
  }
  return val($$1) * ##n / ##3;

[ ]
RE:08109 「1.5」年前を指定したいNo.08110
styth さん 21/05/04 14:53
 
>setfloatmode 1;
 ありがとうございます。できました。お騒がせしました。

[ ]