過去ログ

                                Page     553
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼ヒントに感謝  [名前なし] 04/3/16(火) 19:17

 ───────────────────────────────────────
 ■題名 : ヒントに感謝
 ■名前 : [名前なし] <t1312865@hotmail.com>
 ■日付 : 04/3/16(火) 19:17
 -------------------------------------------------------------------------
   #2432への返信です。
こんばんは。こうちゃんさん。こんな感じになりました。

Public Sub 数値四捨五入()
Dim 元賞金 As Double
Dim 賞金 As Long
元賞金 = InputBox("400以上の整数値を入力してください", "数値入力", "0")

If Not IsNumeric(元賞金) Or (元賞金) < 400 Then
  MsgBox "400以上の数値を数字を入力してください", vbCritical
Exit Su
Else
  賞金 = (Round(元賞金 * 10 ^ (Int(Log(元賞金) / Log(10) - 1) * -1))) * 10 ^ (Int(Log(元賞金) / Log(10) - 1))
MsgBox 賞金
End If

●log(元賞金)/log(10)+1
=>桁数を、小数点まで算出します。(元賞金の桁数は、10の階乗の+1です)。

●Int((log(元賞金)/log(10)-1)*-1)
=>桁数シフトさせるための数値をここで出します。

●Round(Int((log(元賞金)/log(10)-1)*-1))
=>シフトさせた数値を2桁の整数として四捨五入します。

●賞金 = (Round(元賞金 * 10 ^ (Int(Log(元賞金) / Log(10) - 1) * -1))) * 10 ^ (Int(Log(元賞金) / Log(10) - 1))
=>上記数値を、シフトした桁数分元に戻して、賞金に代入し、メッセージで出します。
といった感じです。0.4倍〜0.1倍は後から代入する形をとればよいと思います。

 こうちゃんさんの式が大変役にたつヒントとなりました。ありがとうございます。Ifをはずせば、負数でも絶対値1以下の少数値でも算出できます。これより前に自分で出した式だとかなり遠回りになってしまうので助かりました。少数を文章で載せなかったのは謝罪します。2チャンネルでは荒っぽい言葉ばかりなのでこちらを当分使用させていただきます。今回はありがとうございました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 553