• 締切済み

Pictureボックスに印刷プレビューを描いたとき

ピクチャーボックスコントロールにA4縦の印刷内容を70%の縮尺で印刷プレビューみたいな感じで描いたのですが、そのウインドウを開いたとき最大化にしてないと下の方までピクチャーに描かれません。ウインドウフォームのプロパティを開いたときに最大化に設定にしておくと下の方も全部描かれるのですが、ウインドウを最小化にした時にウインドウからはみでてしまう下の方が消えてしまいます。(最小化状態の見える部分だけ描かれるているようです。)どのようにしたらよいでしょうか? あと、これとは関係ないですが、VB6.0で切り捨て関数は何になりますか?(ROUNDは四捨五入でEXCELのVBと同じ様ですが、ROUNDDOWNは使えないのでしょうか?)初心者なものでよろしくお願いします。

みんなの回答

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.4

> なにせある設計の(役所に添付することもある)計算書 「正確さを要求される計算」なら、浮動小数型(SingleやDouble)は止めた方が無難でしょうね。 整数型(IntegerやLong)の範囲で計算させるか、通貨型(Decimal)や10 進型 (Decimal)で計算したほうが良いでしょうね。 #私もあまり詳しくありませんので、 #これ以上、続く場合、新たな質問にしてください。 #詳しい方がいても、題名が「Pictureボックスに印刷プレビューを描いたとき」では、読んでもらえないかもしれませんので。

otome29
質問者

お礼

タイトルと違う質問に変化してしまい申し訳ございませんでした。また、ご丁寧に対応していただきありがとうございます。 今度から一つの質問に一つのみします。 この誤差について使う方に伝え了解をいただけない場合は、新たに質問を掲載してみようと思います。(説明が難しいですが・・・(TT)) 大変お手数をおかけいたしました。

全文を見る
すると、全ての回答が全文表示されます。
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.3

> 四捨五入・切捨ての記述をいれて検算してみたところ、 > 計算結果があうときもあるし、0.01の単位であわないこともあるようです。 > これが演算誤差でしょうか? 演算誤差もありますが、数値をVBがどう管理しているかの問題も関ってきます。 浮動小数型(Double型)は、内部では、値を2進数で管理しています。 その為、端数の処理方法の違いから、表示上(10進数表記)は切りの良い値なのに、内部で持っている値(2進数)が微妙にずれる場合があります、 この時、2進数(内部で持っている値)が、10進表記に値より、ちょっと小さいとかの場合、 四捨五入・切捨てを行うと、一挙に誤差が現れたりします。 #例えば、表示上は「0.05」なのに、内部的には「0.049999999999999996」だったりすると、 #小数点下2桁目で四捨五入すると、切り捨てられてしまいます。 Double型ではなく、内部的にも10進数で管理している、 通貨型(Decimal)や10 進型 (Decimal)を使うと、こういう誤差を少なくする事ができます。 #演算誤差は完全には無くせませんが・・・

otome29
質問者

お礼

計算するところの変数は見るとすべてSingleで今は書いている様です。なにせある設計の(役所に添付することもある)計算書なものでこの誤差はいいものかどうかもこの計算プログラムソフトを使用する人、つまり設計者の方(私ではない)に聞いてみないとこれもわかりません。。。現状は同じ計算をエクセルにさせてますが。。。VB6.0でも作ってみようと思ったのですが・・・・。通貨型(Decimal)や10 進型 (Decimal)に変えた方が無難なのでしょうかね・・・・?

全文を見る
すると、全ての回答が全文表示されます。
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> VB6における、小数部分の四捨五入と切り捨ての関数の質問に変えさせていただきます。 別途質問をしていただいた方が良いのですが・・・ 基本的に、「算術計算」をして求めるしかありません。 #負の数の場合は省略します。 #また、例は、演算誤差対策やオーバーフロー対策をしていません。 小数部分の切捨ては、 (1)切捨て処理を行いたい桁が、小数第一位になるように桁をずらす。 (2)「Int、Fix 関数」で、切捨てを行う。 (3)もとの桁に戻す。 とします。 例: ---------------------------------------------------------------- Function kirisute(ByVal v As Double, Optional ByVal d As Long = 0) As Double kirisute = v * (10 ^ d) kirisute = Int(kirisute) kirisute = kirisute / (10 ^ d) End Function ---------------------------------------------------------------- 四捨五入も基本的は同じ考えで、 (1)切捨て処理を行いたい桁が、小数第一位になるように桁をずらす。 (2)0.5を加える。 (3)「Int、Fix 関数」で、切捨てを行う。 (4)もとの桁に戻す。 とします。 例: ---------------------------------------------------------------- Function shishagonyuu(ByVal v As Double, Optional ByVal d As Long = 0) As Double shishagonyuu = v * (10 ^ d) shishagonyuu = shishagonyuu + 0.5 shishagonyuu = Int(shishagonyuu) shishagonyuu = shishagonyuu / (10 ^ d) End Function ----------------------------------------------------------------

otome29
質問者

お礼

>「AutoRedraw プロパティ」をTrueにしても駄目ですか? きちんと表示されました。ありがとうございました。 四捨五入・切捨てについてもご丁寧に解説していただき感謝いたします。ありがとうございました。

otome29
質問者

補足

四捨五入・切捨ての記述をいれて検算してみたところ、計算結果があうときもあるし、0.01の単位であわないこともあるようです。 これが演算誤差でしょうか?難しいですね。。。EXCELでは関数があったので、はなにも考えなくて済みましたが(TT)

全文を見る
すると、全ての回答が全文表示されます。
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

> ウインドウを最小化にした時にウインドウからはみでてしまう下の方が消えてしまいます。 「AutoRedraw プロパティ」をTrueにしても駄目ですか? > VB6.0で切り捨て関数は何になりますか? 整数部分だけなら、「Int、Fix 関数」が使えるかもしれません。 ちょっと気になったので・・・ > (ROUNDは四捨五入でEXCELのVBと同じ様ですが、 > ROUNDDOWNは使えないのでしょうか?) ExcelのVBって、EexceVBAですか?ROUNDDOWNってありましたっけ・・・ それとも、Excelの組み込み関数のROUNDDOWNのことでしょうか? ちなみに、組み込み関数のROUNDと、ExcelVBAやVB6のRound関数は同じではありませんね。 「Excel組み込み関数のROUND」は「四捨五入」ですが、 「VB6やExcelVBAのRound関数」は、所謂『銀行型丸め』ですので、 例えばVB6で「Round(2.5)」は「2」になりますね。

otome29
質問者

補足

切り捨て部分は小数部分です。ROUND関数は『EXCEL』みたいです。全て一緒にして考えてしまってました。ご指導ありがとうございます。気づいてよかったです。 VB6の本にも丸めとあり四捨五入とは書いてありませんでした。 VB6における、小数部分の四捨五入と切り捨ての関数の質問に変えさせていただきます。「AutoRedraw プロパティ」については試してみてあとで御礼を投稿させていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Accessフォームでの計算について

    フォーム(非連結)での計算時の四捨五入:切り捨て:切り上げの方法を教えてください。Excelのようにround:rounddown:round upのような関数があるのでしょうか? 宜しく御願い致します。

  • エクセルでの51銭以上未満の切捨ての方法

    社会保険の計算をしています。 51銭以上の切り上げ、未満の切捨ての入力式を教えてください。 エクセル2000を使用しています。 =ROUND(ROUNDDOWN(E19,-2)*3/1000,1) E19には、賞与の支給総額が入ります。 賞与を百の位で切り捨て、四捨五入のつもりでROUNDを使ったのですが、 これですと当然1円の誤差が発生してしまいます。 どうぞ宜しくお願いします。

  • エクセル .50以下で切り捨て、.51で切り上げの関数

    エクセルでround関数や、rounddown関数、roundup関数など、切り上げ・切捨ての関数が多数ありますが、 ・.50以下で切り捨て かつ ・.51以上で切り上げ という関数はあるのでしょうか。 if関数などを用いれば解決できるものでしょうか。 少々細かい質問だとは承知しております。 知恵を貸してください! 下に、私がやりたい切り上げ・切り下げ例を示します。この例を見ていただけると、単なる四捨五入でないことが分かっていただけるかと思います・・・。 例: 2415.50円→2415円 3500.51円→3501円 よろしくおねがいします。

  • セル参照によって関数を変更させたい

    Excel2010を使用しています。 「B列×A1セル」の計算でROUNDDOWN関数を使って切捨てをしているのですが、場合によって切捨てたい位が十の位であったり、百の位であったりとその都度変わるので「=ROUNDDOWN(B5*$A$1,$A$2)」として「A2」セルを参照させ、そこを「-2」「-3」などと変更するようにしています。 ところが切捨てだけではなく、切上げや四捨五入をするケースも出てきたのですが、同じようにセル参照を使って「ROUNDDOWN」を「ROUND」や「ROUNDUP」に変える事は可能でしょうか? 最初の行の関数を書き換えてドラッグでコピーをしたり、置換をしたりすれば良いのでしょうが、セルの値を変えることによって、関数を変えることは出来ないかと考えています。 宜しくお願い致します。

  • エクセルでセルの値によって数式を変えたい

    エクセル2003を使用しておりますが、セルの値によって数式を変えることはできますでしょうか。 例えば A1に切り上げの文字が入っていれば、B1はROUNDUP(100/3,0)に、 A1に切り捨ての文字が入っていれば、B1はROUNDDOWN(100/3,0)に、 A1に四捨五入の文字が入っていれば、B1はROUND(100/3,0)に、 のようにしたいです。 IF文を使えばもちろんできるのですが、すでに指定されている多数の 数式を、一括で置換したいと思っております。

  • excel関数で四捨五入以外の切り捨て、切り上げ

    excelの関数で四捨五入以外の切り捨て切り上げはどうすればいいでしょうか。 小数点以下を切り上げ・切り捨てしたいのですが、 .5までは切り捨てにしたいのです。.51だと切り上げ。 ROUNDだと.5から切り上げになりますよね。 よろしくお願いいたします。

  • エクセルのパーセント表示を四捨五入しないで表示したい。

    Excel2003を使っています。 普通、0.058をパーセント表示にすると6%になりますよね? これを5%と表示することは可能でしょうか? 四捨五入でなく切り捨てのような形に見た目だけ変えたいのです。 ROUNDDOWNを使わず、複数のセルを使ったりせず、1つのセルだけ使って上記のようにすることはできないのでしょうか? ROUNDDOWNを使うと、あとでその部分を計算に使ったときに、 切り捨てられた部分の数値で誤差がでてしまうので、使えないのです。 困っています。何とかよろしくお願いします。

  • ROUND関数と小数点以下桁上げ(桁下げ)ボタンについて

    いつもお世話になっています。素朴な疑問ですが教えてください。 任意の桁数で切り上げや切り捨て、あるいは四捨五入を行なう関数としてROUNDUP関数やROUNDDOWN関数、そしてROUND関数というものが存在しますが、このうち四捨五入を行なうROUNDUP関数は、整数表示にしたい場合やそれ以下の小数第○位の表示にしたい場合に使う限りにおいては書式設定ツールバーの「小数点以下桁上げ(桁下げ)」ボタンを使えば事足りるのではないでしょうか? あるいは使い分けをしなければならないケースも存在するのでしょうか? ご存知の方いらっしゃいましたらぜひ教えてください。宜しくお願いいたします <(__)>

  • SQLServerでの切り上げ処理

    SQLServerで、小数部の丸め処理で困っています。 切り捨て → round(150.7, 0, 1) 四捨五入 → round(150.7) というところまではなんとかわかったのですが、切り上げ処理がうまくいきません。 ceiling(150.7)やfloor(150.7)などいろいろ試してみたのですが、どうしてもうまくいきません(T-T) どなたかわかる方がいらっしゃいましたらアドバイスお願いします。

  • エクセル関数について(エクセル初心者)

    オートSUMにしたセルの中身を 少数点以下切捨てにするにはどうしたらよいのでしょうか? 表示設定ではいくらやっても四捨五入にしかならない のです・・・ ROUNDDOWNの入れ方も分かりません・・・ 初心者なもんで簡単に答えて頂けたら幸いです。