文書中の数値について、小数点以下の桁数を揃えたい

  1. 文章中に任意の数字(小数点以下の桁数は不揃い)が幾つもあるとき
    選択範囲の数値について、
    小数点以下を「ある桁」で「切り上げ」又は、「切り捨て」て
    小数点以下が揃った数字に統一したいときのマクロはどのようになるのでしょうか?
    例えば、小数点以下を、1桁あるいは2桁で統一する場合です。

    使用OS、マシン等

    Mery(x64) Version 3.4.3

    エディション Windows 10 Home
    バージョン 22H2
    インストール日 ‎2021/‎11/‎17
    OS ビルド 19045.2604
    エクスペリエンス Windows Feature Experience Pack 120.2212.4190.0

     |  konnchan  |  返信
  2. おそらくこんな感じになると思いますが、あまりテストしてないのでご参考までに。

    // 桁数 (0 から 20 まで)
    var digits = 2;
    
    // roundDown: 切り下げ
    // truncate: 切り捨て
    // roundUp: 切り上げ
    var replacer = truncate;
    
    function roundDown(m) {
      var i = Math.floor(m + 'e' + digits);
      var d = Number(i + 'e-' + digits);
      return d.toFixed(digits);
    }
    
    function truncate(m) {
      var i = String(Number(m + 'e' + digits)).split('.')[0];
      var d = Number(i + 'e-' + digits);
      return d.toFixed(digits);
    }
    
    function roundUp(m) {
      var i = Math.ceil(m + 'e' + digits);
      var d = Number(i + 'e-' + digits);
      return d.toFixed(digits);
    }
    
    document.selection.text = document.selection.text.replace(/-?\d+\.\d+/g, replacer);
     |  ucky  |  返信
  3. > おそらくこんな感じになると思いますが、あまりテストしてないのでご参考までに。
    >
    >

    早速の対応(ご指導)有り難うございます。
    当方、JS等プログラミングには全く素人の
    後期高齢者(75歳)です。

    投稿して頂きましたコードで幾つか試してみましたが
    RoundUpする時の処理が期待した通りになりません。
    (例えば、下記文書で、
    小数点以下第二位を切り上げ、
    小数点第一位で揃えたいとき、
    小数点第二位は切り捨てられ、
    繰り上げられません。)

    コードをどの様に修正すればいいのでしょうか?
    お忙しい所、恐縮ですが
    初歩的なことも分からいため、ご指導下されば幸いです。
    宜しくお願いします。

    なお、下記の文書などで、
    小数点以下第1位で統一表記するときなどを想定しています。

     Netで調べてみると、統計を取り始めた1947年の平均寿命は男性50.06歳、女性53.96歳だったが、70年後の2016年には男性が80.98歳、女性が87.14歳となっている。僅か70年の間に男女とも30年以上も長生きとなっているのだ(男性:30.92歳、女性:33.18歳)。
     更に、2022年 7月末の厚生労働省の発表によると、2022年の平均寿命は男性は81.47年、女性は87.57年となり長寿化の流れは止まらない。

     |  konnchan  |  返信
  4. 上記のコードは桁数と置き換え方法を希望する動作によって書き換える必要があります。

    小数点以下第二位を切り上げ、小数点第一位で揃えたいときは、前半部分を以下のように書き換えると期待する動作になるかと思います。

    // 桁数 (0 から 20 まで)
    var digits = 1;
    
    // roundDown: 切り下げ
    // truncate: 切り捨て
    // roundUp: 切り上げ
    var replacer = roundUp;

    例文で試したところ以下のようになりました。

     Netで調べてみると、統計を取り始めた1947年の平均寿命は男性50.1歳、女性54.0歳だったが、70年後の2016年には男性が81.0歳、女性が87.2歳となっている。僅か70年の間に男女とも30年以上も長生きとなっているのだ(男性:31.0歳、女性:33.2歳)。
     更に、2022年 7月末の厚生労働省の発表によると、2022年の平均寿命は男性は81.5年、女性は87.6年となり長寿化の流れは止まらない。

     |  ucky  |  返信
  5. > 上記のコードは桁数と置き換え方法を希望する動作によって書き換える必要があります。
    >
    > 小数点以下第二位を切り上げ、小数点第一位で揃えたいときは、前半部分を以下のように書き換えると期待する動作になるかと思います。
    >
    >
    >
    > 例文で試したところ以下のようになりました。
    >
    >  Netで調べてみると、統計を取り始めた1947年の平均寿命は男性50.1歳、女性54.0歳だったが、70年後の2016年には男性が81.0歳、女性が87.2歳となっている。僅か70年の間に男女とも30年以上も長生きとなっているのだ(男性:31.0歳、女性:33.2歳)。
    >  更に、2022年 7月末の厚生労働省の発表によると、2022年の平均寿命は男性は81.5年、女性は87.6年となり長寿化の流れは止まらない。

    早速のご教示有り難うございました!
    取り急ぎ、お礼申し上げます。

     |  konnchan  |  返信
スポンサーリンク