Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2020-01-15

はてなブログでなでしこ3を使おうとしたけどうまくいかない話

| 17:55

 この、はてなグループが無くなってしまうとゆうことで、ずっとここでなでしこのコトを書き散らしていたワタシは、途方に暮れています。

 いんぽーととかえくすぽーととか、よく分らん・・・(ーー;

 しかし、お引っ越し先については、はてなブログでいいじゃん・・・と思っていました。

 ところで、ここでは使えないのに、はてなブログでは、記事にJavascriptが埋め込めるラシイんですね。

 なら、なでしこ3も動くんじゃ?! と思って試してみたところ、動きました!

 なんてこった。これなら、わざわざヨソにプログラム置き場を用意しなくても、ふつーにブログの記事上に実行結果を表示出来るではないですか!

 ところが・・・

 動くには動いたんですけどもね。

 wnako3を読み込ます時に、deferを付けてると動かない。で、外すとなでしこは動くんだけど、代わりに、なんか、はてなブログのグローバルヘッダってんですかね、一番上の細いHatenaBlogとか表示されてるトコや、読者になるボタンなどの文字が表示されなくなっちゃいます。

 どうも、wnako3を読むと、iframeが読まれなくなっちゃう的な(?)

 いや、ベツにある種ワタシ的には表示されなくたって構わぬのだけど、他にも何か正常動作してない部分があるかも知れないし、はてなさんにけしからんと言われてしまうかも知れぬでね;;;

 むむむ。世の中甘くないなあ(´・ω・`)

 Javascriptが使えたら自動的になでしこ3も動く訳じゃ無いのか・・・それとも、ワタシがよく知らないだけではてなブログは何らかの制限が設けられているのか・・・(?_?)

 どうせなら、やっぱりなでしこ3の動かせるブログがいいなあ・・・とゆうワケで、再び路頭に迷い始めました。しくしくしくしく。

 ちなみに、さくらブログで試してみたら、問題なさげ(タブン)

 でもさくらは、PWAをお試しするの為だけにちょっと契約してみたけど、来年以降どうするか決めてないからにゃあ。

 忍者ブログも動いた風味(タブン)

 いっ、いろんなトコお試しして発表してみるとか?(^▽^;

  

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20200115

2019-12-13

PWAでなでしこプログラムをAndroidにインストールしてみるよ!(その3)

| 09:25

 世の中のPWAについて書いてるのを色々見ると、一番の目玉はキャッシュをつかって高速に、オフラインでも見れる、とゆうことであるらしい。

 ーですか。ワタシのようなしろーと的には、インストール出来るとかカッコいい! だったんですがw

 でも、オフラインで動くというのはよきですよ☆

 一段とアプリっぽさがアップするし、何より確かに実用的です。

 と、ゆうわけで、やっぱりオフラインには対応しなくては!

オフラインでも動かしたい】

 なでしこ3をオフラインで動かそうとゆう場合、まず一番になすべきことは、なでしこを使うために必要なwnako3.jsをダウンロードしてくることです。

https://nadesi.com/v3/

 ふつーは、なでしこの公式にアップされている物へリンクを貼って引っ張っていると思うんだけど、コレがないとなでしこが動かないので、これ自体をキャッシュにいれてやらねばならんのです。

 ダウンロードして、良きところへアップロードして、HTMLのwnako3.jsを呼び出すscriptタグのsrcを書き換え。

kanzan_3.html


<script src="https://yamato-nadesiko.sakura.ne.jp/wnako3/nadesiko3-3.0.61/wnako3.js?run" defer></script>

sw.js

 ででで、sw.js

 cacheNameを付けて、contentToCacheにキャッシュするファイルのリストを。

 これは、sw.jsからの相対指定で良いようです。はwnako3.js以外は全てsw.jsと同じトコにあります。違うとこに置いたwnako3.jsは相対指定がめんどーだったのでURLを貼りました。全部をURLにするのもアリです。

 なんにもせよ一個でも読めないファイルがあるとダメなのでご注意なのです。

 installイベントの中身は、呪文ですw

var cacheName = 'kanzan_3';
var contentToCache = [
  'https://yamato-nadesiko.sakura.ne.jp/wnako3/nadesiko3-3.0.61/wnako3.js',
  'kanzan_3.html',
  'icon-192.png',
  'icon-512.png'
];

self.addEventListener('install', function(e) {
  e.waitUntil(
    caches.open(cacheName).then(function(cache) {
      return cache.addAll(contentToCache);
    })
  );
});

self.addEventListener('activate', function(e) {
});

self.addEventListener('fetch', function(e) {
});

 Javascriptが分んないから、こんなんでもいちいち苦戦orz

 どうもうまくいかなんだので、色々なんだかんだして、これオフラインで動くための、必要最小の構成と分りました。

https://yamato-nadesiko.sakura.ne.jp/pwa-test/3/kanzan_3.html

 これで、いちおうインストールして、機内モードにしても動くようにはなったんですけれどね。まだ、完全ではありません。

 インストールした後、一目はキャッシュを取る為オンラインで起動しなきゃならなかったり、オフラインで使用中に不用意に再読込してしまうと止まっちゃったりします。


オフラインでもちゃんと動くようにする】

 大体・・・なんでんな苦戦したのか、自分でもマッタク分からんね。

 だってね、の後もう一度やったら・・・

https://developer.mozilla.org/ja/docs/Web/Progressive_web_apps/Offline_Service_workers

 呪文部分は全て、こっからのコピペで出来たんですからっΣ(゜д゜;

 単に、ファイルリストの問題だったのか・・・Javascript以前に、またジェイソンさんなのか・・・orz

 cacheNameはバージョン管理出来るようにしとけとどっかに書いてあったのと、htmlファイルが連番にしてあるので、こんな風にしてみましたが、は無事通りました;(文字列変数を使う時には囲みを「`」にするのを忘れず!)

sw.js

//-----------------------------------------------
// バージョン
var Ver = '4';

// キャッシュの名前
var cacheName = `kanzan_${Ver}`;

// キャッシュするファイルのリスト
var contentToCache = [
  'https://yamato-nadesiko.sakura.ne.jp/wnako3/nadesiko3-3.0.61/wnako3.js',
  `kanzan_${Ver}.html`,
  'icon-192.png',
  'icon-512.png'
];
//-----------------------------------------------

// 以下は呪文w
self.addEventListener('install', function(e) {
  console.log('[Service Worker] Install');
  e.waitUntil(
    caches.open(cacheName).then(function(cache) {
          console.log('[Service Worker] Caching all: app shell and content');
      return cache.addAll(contentToCache);
    })
  );
});

self.addEventListener('activate', function(e) {
  e.waitUntil(
    caches.keys().then(function(keyList) {
          return Promise.all(keyList.map(function(key) {
        if(cacheName.indexOf(key) === -1) {
          return caches.delete(key);
        }
      }));
    })
  );
});

self.addEventListener('fetch', function(e) {
  e.respondWith(
    caches.match(e.request).then(function(r) {
          console.log('[Service Worker] Fetching resource: '+e.request.url);
      return r || fetch(e.request).then(function(response) {
                return caches.open(cacheName).then(function(cache) {
          console.log('[Service Worker] Caching new resource: '+e.request.url);
          cache.put(e.request, response.clone());
          return response;
        });
      });
    })
  );
});

 一応・・・

 activateは、不要になった古いキャッシュを消去するためのヤツらしい。

 fetchでは、「リソースが実際にキャッシュ内にある限り、ネットワークではなくキャッシュからコンテンツを提供します。 アプリがオンラインかオフラインかに関係なく、これを行います。 ファイルがキャッシュにない場合、アプリはそれを提供する前にまずこに追加します。」とゆうことが行われているらしい。

 タブンですが、まずはインストール時にキャッシュするよ。もしcacheNameが変更になってたらバージョンアップしたよとゆうことで、前のキャッシュは消してあたらしいキャッシュを取りにいくけど、それ以外の時は常に、オンラインでもオフラインでもとにかくキャッシュを使うぜ! というこってしょう(?)

 とりあえず、これで3の時にあったようなオフライン時の不都合が一切無くなり、イイ感じです♪

https://yamato-nadesiko.sakura.ne.jp/pwa-test/4/kanzan_4.html

 これなら、呪文部分は使いしで、変数宣言部分だけ書き換えれば、だいたいのHTML埋め込みなでしこプログラムが、PWA化出来そうじゃないですか?(喜)

 PWAには、他にも通知やプッシュ通知などの出来る機能があるみたいだけど、それは当然アプリ毎に実装する機能だからワタシなどの知恵ではマッタク追っつかないので、ひとまずこんな所でしょう。

 むしろ、CSSなんかをうまく使って、よりアプリっぽい見た目にすると良さげ?

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20191213

2019-12-12

PWAでなでしこプログラムをAndroidにインストールしてみるよ!(その2)

| 07:35

 も、取りあえず「インストール」できるようにするのが目的です。

 サービスワーカーを登録すると、ちゃんとアプリドロワーにも入ってくれちゃうってコトなんです!

【サービスワーカーの登録】

https://developer.mozilla.org/ja/docs/Web/Progressive_web_apps/Offline_Service_workers


kanzan_2.html

 なでしこの場合は、htmlの中に、直でコードを書くので、htmlファイルのheadにscriptタグで、サービスワーカーを登録するためのJavascriptの呪文を入れます。

<script>
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/pwa-test/2/sw.js');
}
</script>

 こんだけなんですが、ここ重要なことが。

 ・sw.jsのありかは、呼出し元のhtmlからの相対ではないのでご注意です。

 ・あと、呼出し元のhtmlは、sw.jsと同じかの配下にないとダメっぽい(?)

 コレが分ってなかったせいで、延々はまったのよヽ(;´Д`)ノ


sw.js

 して、肝心のサービスワーカーの内容ですが、取りあえずこんだけ。

self.addEventListener('install', function(e) {
});

self.addEventListener('activate', function(e) {
});

self.addEventListener('fetch', function(e) {
});

 必要のイベントを登録してますが、中身は何も無いダミーです。ではダメです。

 インストール出来るようにするだけなら、fetchだけあればいいらしい(?)とゆう話もあるんですが、試してません。取りあえず、この三つは後で使うヤツなんで、こうしておきますですよ。


 これだけで、なんと!

https://yamato-nadesiko.sakura.ne.jp/pwa-test/2/kanzan_2.html

 Androidのchromeでは、画面下に、「ホーム画面に単位変換を追加」とゆうお知らせがポップアップします。ぽいっ!(喜)

 前のとは違って、ホームのアイコンを削除しただけでは無くならず、アプリドロワーからアンインストール出来るようになってます。ぽいぽいっ♪

 ちなみにFirefoxでは、マニフェストを登録しただけの時と挙動は変わらず、家に+のマークが出るので、こからインストールできますが、アプリドロワーには入らないようです。

 あと、PCのGoogleChromeさんでも、○に+のマークがURLバーのトコに表示されて、インストール出来るようになってんです。デスクトップと、スタートメニューにもショートカットが入ります。

 windowsからも、webアプリってコトを意識しないで使える、ちょっとした物が作れそうじゃないですか?!

 いや、なでしこ1があるからそれは別にいいんだけど。

 でも、人にやらそうと思った時、だうんろーどして解凍とか意味分らんって人、世の中にはいっぱいいたりするじゃないですか?w


 次は、ちゃんとオフラインでも動くようにします。

《続きます》

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20191212

2019-12-11

PWAでなでしこプログラムをAndroidにインストールしてみるよ!(その1)

| 09:21

 なんでも、PWAなる技術を使うと、ウェブサイトがAndroidにインストール出来るようになって、アプリっぽく起動するらしい!

 りゃやってみないと! とゆうわけで、やってみようと思ったら、https接続でしか出来ないらしい(´・ω・`)(いちおうローカルホストでは出来るらしい)

 ってコトで、コレをお試しする為だけに、さくらインターネットに登録してしまったよ(^▽^;

 さくらのレンタルサーバーでは、ライトプランでも初期ドメインでは共有SSLってのが使えるんだよね。素晴らしい。

 共有SSLは、初期状態から標準で利用中になってるっぽいですね。

 あと、.htaccessに、こんな呪文が必要です。

 httpからhttpsにリダイレクト(?)する呪文です。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 これで、http接続では出来なかった、位置情報の取得も出来るようになりました。おおぅ!

 こんなことなら、はなっからジオシティーズからのお引っ越し先をここにしとけば良かったけど、ついつい無料のトコで探しちゃったよね。

 

 さてさて、それではとりあえず、前作った単位変換のプログラムで、お試ししてみたいと思います!

 主にココを参考にやっていきます~。

https://developer.mozilla.org/ja/docs/Web/Progressive_web_apps#Core_PWA_guides


【ウェブマニフェストの読み込み】

 なんか順番がアレですけど、取りあえずインストールできるようにするのが目的なので、まずは「4.PWAをインストール可能にする方法」から。

https://developer.mozilla.org/ja/docs/Web/Progressive_web_apps/Installable_PWAs


 ウェブマニフェストファイルとアイコンを用意します。

 ウェブマニフェストは、なんか、こんな感じ。

kanzan.webmanifest

 アプリとしての各種設定などを記述するファイルです。

{
  "name":"単位変換 尺貫法⇔メートル法",
  "short_name":"単位変換",
  "description":"尺貫法とメートル法の単位を換算する",
  "icons": [
    {
      "src": "icon-192.png",
      "sizes":"192x192",
      "type": "image/png"
    },
    {
      "src": "icon-512.png",
      "sizes":"512x512",
      "type": "image/png"
    }
  ],
  "start_url": "/pwa-test/1/kanzan_1.html",
  "display": "standalone",
  "theme_color": "#EEF9FF",
  "background_color": "#F9FCFF"
}

 ウェブマニフェストの詳細はここあります

https://developer.mozilla.org/ja/docs/Web/Manifest

 とりあえず「display」は「standalone」にすると、ブラウザタブやタイトルバー表示されず、アプリっぽくなります。

 アイコンは、サンプルのソースを見るとべらぼうにいっぱい登録されていますが、最低限の要件として「少なくとも1つのアイコン」とあるので、ならとりあえず一個あれば良いのだろうと思ったのですが、「少なくとも192 x 192 pxのアイコンと512 x 512 pxのアイコンを用意する必要あります」という説もあり。

https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/?hl=ja#%E3%82%A6%E3%82%A7%E3%83%96%E3%82%A2%E3%83%97%E3%83%AA%E3%83%9E%E3%83%8B%E3%83%95%E3%82%A7%E3%82%B9%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B

 512pxのアイコンが無いと、アプリ起動時に表示されるアイコンが出ない感じでした。


kanzan_1.html

 して、HTMLのheadにlinkタグでウェブマニフェストファイルを読み込むためのリンクを設置します。

<link rel="manifest" href="kanzan.webmanifest">

 あと、iPhoneはウェブマニフェストがまだサポートされてないらしく、代わりにこんなmetaタグを追加するってコトなんですが、iPhone無いからお試し出来ません;

<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="単位変換">
<link rel="apple-touch-icon" href="icon-192.png">

 とりあえずこれで、Androidのchromeメニューからホーム画面に追加すると、ホームにアイコンが出来て、ぽい感じに起動するようになりました!

 Firefoxでは、URLバーの横っちょに家の形に+のアイコンが表示されて、インストール出来ることをお知らせしてくれちゃいます!

https://yamato-nadesiko.sakura.ne.jp/pwa-test/1/kanzan_1.html

 まあ・・・たったこんだけの筈だったんですがね・・・

 どうもうまくいかず延々はまった(´д`)

 JSONさん違えてただけだった。最後の項目にさりげなく「,」が入っててっヽ(;´Д`)ノ


 とっ、ともかく、何もしていないPWA未対応の状態だと、chromeメニューからホームに追加するをしても、ホームには単にサイトへのショートカットができるだけです。

https://yamato-nadesiko.sakura.ne.jp/pwa-test/0/kanzan_0.html

 比べて悦に入り、気を取り直しますw

 よきよきー♪


 とはいえ、こんだけだとマニフェストにしたがってホームのアイコンが変わり、standaloneでぽい見た目になってるだけで、実際にはショートカット出来てるだけと、変わりはないですね。

 ブラウザで、インストール出来る感を出してくれるのは、AndroidのFirefoxだけですし。

 次は、サービスワーカーについて学びます☆


《続きます》

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20191211

2019-12-08

尺貫法⇔メートル法の単位変換を実際に即して行いたい!

| 19:04

 マイナビ連載49目は、時給計算ツールを作ろう!でした。

https://news.mynavi.jp/article/nadeshiko-49/

 時の計算ってめんどくさいですよね~。

 なでしこ1の日付時計算命令は、とても便利で良い物でした。

 v3には実装されていないので、前に同じように使える関数を作ってみたりしたよね。

https://nadesiko.g.hatena.ne.jp/snowdrops89/20170824/1503579885


 めんどくさいと言えば、単位の変換もそうですよねー?

 して、例えば「1km」を「9.1667町」とか「550」とかに変換してくれるサイトは沢山あるんですけれどね。

 そうじゃない

 こはやはり、実際に即して、9町10となって欲しい。

 コレが、尺、寸だったら10進法だから165cm→5.445尺となっても、あー、5尺4寸4分5厘ですかねとゆうことになるんだけど、里、町、だとそうはいないワケですよ。1里は36町で、1町は60なんですよね。めんどくさい(´д`)

 というわけで、こんなの。

#-----------------------------------------------------------------------
# 単位変換 尺貫法←→メートル法
#-----------------------------------------------------------------------
変換データ=「"長さ","尺貫法","丈,尺,寸,分,厘","10,1,0.1,0.01,0.001","{1/3.3}","(じょう)=10尺=3.0303m,(しゃく)=10寸=30.303cm,(すん)=10分=3.0303cm,(ぶ)=10厘=3.0303mm,(りん)=0.30303mm"
"長さ","メートル法","m,cm,mm","1,0.01,0.001","3.3"," (メートル)=100cm=3.3尺, (センチメートル)=10mm=3.3分, (ミリメートル)=3.3厘"
"距離","尺貫法","里,町,,尺","12960,360,6,1","{1/3.3}","(り)=36町=3.9273km,(ちょう)=60=109.09m,(けん)=6尺=1.8182m,(しゃく)=30.303cm"
"距離","メートル法","km,m","1000,1","3.3"," (キロメートル)=1000m=9町10, (メートル)=3.3尺"
"体","尺貫法","石,斗,升,合,勺","100,10,1,0.1,0.01","{2401/1331}","(こく)=10斗=180.39L,(と)=10升=18.039L,(しょう)=10合=1.8039L,(ごう)=10勺=180.39cc,(しゃく)=18.039cc"
"体","メートル法","L,cc","1,0.001","{1331/2401}"," (リットル)=1000cc=0.55435升, (シーシー)=0.05543勺"
"面","尺貫法","町,反,畝,坪","3000,300,30,1","{1/0.3025}","(ちょう)=10反=9917.4m<sup>2</sup>=約1ha,(たん)=10畝=991.74m<sup>2</sup>=約1a,(せ)=30坪=99.174m<sup>2</sup>,(つぼ)=3.3058m<sup>2</sup>"
"面","メートル法","ha,a,m<sup>2</sup>","10000,100,1","0.3025","(ヘクタール)=10000m<sup>2</sup>=約1町,(アール)=100m<sup>2</sup>=約1反,(平方メートル)=0.3025坪"
"重さ","尺貫法","貫,斤,両,匁","1000,160,10,1","3.75","(かん)=1000匁=3.75kg,(きん)=160匁=600g,(りょう)=10匁=37.5g,(もんめ)=3.75g"
"重さ","メートル法","kg,g","1000,1","{1/3.75}"," (キログラム)=1000g=266.67匁, (グラム)=0.26667匁"」
変換データ=変換データをCSV取得。

#---宣言----------
変換元単位=。変換元単位相関=。変換元単位説明=。
変換先単位=。変換先単位相関=。変換定義=。
変換先A=配列。変換先B=配列。
桁=8。

#---HTML設定----------
HTML=「
  <div id="select"></div>
  <p><div id="setumei"></div></p>
  <p><div id="gui"></div></p>
  <p><div id="result"></div></p>」
「#nako3_div_1」にHTMLHTML設定。

#---CSS設定----------
「#setumei」に{
  "margin": "20px",
}をDOMスタイル一括設定。

「#gui」に{
  "width": "380px",
  "margin": "20px",
}をDOMスタイル一括設定。

「#result」に{
  "border": "3px double",
  "margin": "5px",
  "padding": "10px",
  "文字サイズ": "20px",
  "背景色": アリスブルー色
}をDOMスタイル一括設定。

#---セレクトボックス作成----------
項目=配列
数=0。
変換データを反復
  換算項目=対象[0]。変換元=対象[1]。
  もし、数%2=0ならば、変換先=「メートル法」
  違えば、変換先=「尺貫法」
  項目[数]=「{換算項目} {変換元}→{変換先}」。
  数=数+1。
ここまで。

「#select」にDOM親要素設定。
項目のセレクトボックス作成し、項目セレクトに代入。
項目セレクトの「onchange」に「フィールド作成」をDOMイベント設定。
#-----------------------------------------------------------
フィールド作成。

●フィールド作成
  v=項目セレクトの「value」をDOM属性取得。
  No=項目からvを配列検索。
  変換元=変換データ[No]。
  もし、No%2=0ならば、変換先=変換データ[No+1]。
  違えば、変換先=変換データ[No-1]

  タイトル=「{変換元[0]}の単位変換 {変換元[1]}→{変換先[1]}」
  説明=「{変換元[1]}の{変換元[0]}の単位を、{変換先[1]}に変換します。」

  #---データ----------
  変換元単位=変換元[2]を「,」で区切る。
  変換元単位相関=変換元[3]を「,」で区切る。
  変換元単位説明=変換元[5]を「,」で区切る。
  変換先単位=変換先[2]を「,」で区切る。
  変換先単位相関=変換先[3]を「,」で区切る。
  変換定義=変換元[4]。
  変換先A=配列。変換先B=配列。

  #---項目設定----------
  resultクリア。
  説明=説明の改行を「<BR>」に置換。
  「#setumei」に説明をテキスト設定。

  #---GUI作成----------
  変換元エディタ。
  (変換元単位の要素数)
    変換元エディタ=変換元エディタに「<input type="text" id="edit{回数-1}" value="0" maxlength="{桁+2}" onclick="this.select();"  pattern="^[0-9]+$">
        <span>{変換元単位[回数-1]}{変換元単位説明[回数-1]}</span><BR>」を一行追加。
  ここまで。
  変換元エディタを「#gui」にHTML設定。
  (変換元単位の要素数)
    「#edit{回数-1}」に{
      "幅": "65px",
      "高さ": "20px",
      "margin": "5px",
      "text-align": "right",
      "padding":"0px 5px",
      "ime-mode":"disabled"
    }をDOMスタイル一括設定。
  ここまで。

  「#gui」にDOM親要素設定。
  「変換」のボタン作成して、変換ボタン代入。
  「クリア」のボタン作成して、クリアボタン代入。
  変換ボタンに{"幅": "60px","margin": "5px"}をDOMスタイル一括設定。
  クリアボタンに{"幅": "60px","margin": "5px"}をDOMスタイル一括設定。

  #---イベント設定----------
  クリアボタンをクリックした時には、
   (変換元単位の要素数)
     「#edit{回数-1}」に0をテキスト設定。
   ここまで。
   resultクリア。
  ここまで。

  変換ボタンをクリックした時には
   #---変換元を一つにまとめる----------
   変換元=0。
   (変換元単位の要素数)
     仮=「#edit{回数-1}」のテキスト取得。
     もし、(仮が数列判定)=いいえならば、
       仮=0。「#edit{回数-1}」に0をテキスト設定。
     ここまで。
     仮=仮*(変換元単位相関[回数-1])。
     変換元=変換元+仮。
   ここまで

   #---変換先A(実際に即した換算)作成----------
   基本=変換元*変換定義。  #基本となるデータ
   (変換先単位の要素数)
     基本=基本を桁で小数点四捨五入。
     もし回数=1ならば、基本=基本*(1/変換先単位相関[回数-1])
     違えば、基本=(基本-変換先A[回数-2])*(1/(変換先単位相関[回数-1]/変換先単位相関[回数-2]))
     もし回数=(変換先単位の要素数)ならば、変換先A[回数-1]=基本を2で小数点切捨。
     違えば、変換先A[回数-1]=基本を切り捨て。
   ここまで。

   #---変換先B(各単位毎単独で換算)作成----------
   基本=変換元*変換定義。  #基本となるデータ。
   (変換先単位の要素数)
     変換先B[回数-1]=(基本/変換先単位相関[回数-1])を桁で桁揃え。
   ここまで。

   #---HTML設定----------
   A=。B=。
   (変換先単位の要素数)
     A=A&「{変換先A[回数-1]}{変換先単位[回数-1]} 」
     B=B&「{変換先B[回数-1]}{変換先単位[回数-1]}<BR>」
   ここまで。
   変換内容=A&「<BR><BR>」&B。
   「#result」に変換内容をHTML設定。
  ここまで。
ここまで。

●resultクリア
 A=。B=。
 (変換先単位の要素数)
  A=A&「0{変換先単位[回数-1]} 」
  B=B&「0{変換先単位[回数-1]}<BR>」
 ここまで。
 変換内容=A&「<BR><BR>」&B。
 「#result」に変換内容をテキスト設定。
ここまで。
#-----------------------------------------------
●(数を桁で)桁揃え
 整数桁=(数の整数部分文字列変換)の文字数。
 もし整数桁≧桁ならば、数の整数部分戻る。
 違えば、数を(桁-整数桁)で小数点四捨五入して戻るここまで。

●(数をAで)小数点四捨五入
  数=数*(10^A)
  数=数を四捨五入。
  数=数/(10^A)
  数で戻る
ここまで。

●(数をAで)小数点切捨
  数=数*(10^A)
  数=数を切捨。
  数=数/(10^A)
  数で戻る
ここまで。

●(数の)整数部分
  数のINTここまで。

●(数の)小数部分
  数のFRACここまで。
#-----------------------------------------------------------------------

http://snowdrops.starfree.jp/nako3/kanzan_1_10.html

 どうかな? うまくいってると思うんだけど・・・

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20191208