C++ Builder XE4 > 차이 > this->ScaleBy(100/s_curFactor, 100); 및 this->ScaleBy(100, s_curFactor * 100); > 전자는 계산 오차를 발생
C++ Builder XE4
관련
위에서 작업하는 동안 IDE 버그로 인한 오차 축적을 발견했습니다.
앞으로 같은 문제를 만날지도 모르기 때문에 기사로 잘라낸다.
증상 및 구현
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
enum {
FONT_SMALL = 0,
FONT_MEDIUM,
FONT_LARGE,
FONT_EXTRA_LARGE,
FONT_HUGE,
};
static float s_curFactor = 1.0; // 拡大率
static int s_cntChangeSize = 0; // フォントサイズ変更回数
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CMB_fontSizeChange(TObject *Sender)
{
s_cntChangeSize += 1;
Label1->Caption = IntToStr(s_cntChangeSize);
//-----------
int preH = this->Height;
int preW = this->Width;
this->ScaleBy(100 / s_curFactor, 100); // 拡大率を使って拡大するため、一旦1.0の倍率に戻す
// this->ScaleBy(100, s_curFactor * 100); // 拡大率を使って拡大するため、一旦1.0の倍率に戻す
switch(CMB_fontSize->ItemIndex){
case FONT_SMALL:
s_curFactor = 1.00; // 結果を見て調整する
break;
case FONT_MEDIUM:
s_curFactor = 1.20; // 結果を見て調整する
break;
case FONT_LARGE:
s_curFactor = 1.40; // 結果を見て調整する
break;
case FONT_EXTRA_LARGE:
s_curFactor = 1.60; // 結果を見て調整する
break;
case FONT_HUGE:
s_curFactor = 1.80; // 結果を見て調整する
break;
}
this->ScaleBy(100 * s_curFactor, 100);
// 元の高さ、幅に戻すことで、パネルのコンポーネントのサイズだけを拡大できる
// (結果として、TChartは小さくなる)
this->Height = preH;
this->Width = preW;
}
//---------------------------------------------------------------------------
재현 방법
Button의 B 문자가 절반 사라집니다.
대책
대책을 실시하지만, 이하를 검토했다.
버전 고유의 버그 대응은, 장래의 IDE 버전 업시에는 된다.
어떤 버전에서도 문제가 없는 구현이 바람직하다.
아래의 방법으로 대처할 수 있는 것을 발견했다.
// this->ScaleBy(100 / s_curFactor, 100); // 拡大率を使って拡大するため、一旦1.0の倍率に戻す
this->ScaleBy(100, s_curFactor * 100); // 拡大率を使って拡大するため、一旦1.0の倍率に戻す
Button B의 문자 표시에 문제가 없어졌습니다.
Reference
이 문제에 관하여(C++ Builder XE4 > 차이 > this->ScaleBy(100/s_curFactor, 100); 및 this->ScaleBy(100, s_curFactor * 100); > 전자는 계산 오차를 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/a66b2dffafce8306ebcd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)