# Native Code > برنامه نویسی در Delphi > ابزارهای گزارش سازی در دلفی > سوال: خطای  is not a valid floating point value  در Fast Report

## fahimi

با سلام دوستان گرامی 
من تا زمانیکه از ویندوز 7 استفاده می کردم  گزارشات بدون هیچ اشکالی اجرا می شود و ولی از زمانیکه ویندوز 8.1 استفاده کردم متاسفانه هنگام نمایش با خطا is not a valid floating point value رخ می دهد.
خطا زمانی رفع می شود که در تنظیمات کنترل پنل  علامت اعشار"." را "/" تغییر داده شود. به نظر روش منطقی نیست.
من Delphi XE6 و Fast Report 5.3.16 استفاده می کنم.

----------


## یوسف زالی

سلام.
به نسخه ربطی نداره، به پیش فرض مرتبطه، برای همین توصیه می کنم در برنامه این تنظیمات چک شده و بر طبق اون تبدیلات رشته به عدد انجام بشه.
یا این که هنگام ورود به برنامه برای یوزر این تنظیمات رو انجام بدید.

----------


## fahimi

با سلام خدمت یوسف زالی
این خطا ارتباط به تبدیل رشته به عدد ندارد در واقع در زمان طراحی گزارش پیش فرض ویندوزCustomize Format\Decimal Symbol '/' باشد و در رایانه دیگر پیش فرض ویندوز '.' رخ می دهد.
http://stackoverflow.com/questions/2...rror-in-delphi
برای اینکه متوجه مشکل شوید فایل 1 , 2 را با Note Pad  باز کنی متوجه منظورم می شوید .
FastErr.rar

----------


## fahimi

متاسفانه در ویندوز 8 به بالا زمانیکه شما تنظیمات را Persian  انتخاب می کنید پیش فرض اعشاری را '/' تبدیل می کند با به وجود آمدن مشکلات در  در تعدادی از برنامه ازجمله Excel  کامپوننت Fast Report می شود در حالیکه مفهوم  '/' آن به '.'  متفاوت می باشد . برنامه ها / را به عنوان یک عملگرا برداشت می کند.
ساده ترین را در هنگام طراجی گزارش بررسی کنیم که در کنترل پانل  Customize Format\Decimal Symbol حتماً '.' باشد و در صورتی که در هنگام طراحی علامت اعشاری در ویندوز '/'  بوده  است. ابتدا تنظیم کنترل پانل '/'  قرار می دهیم  پس باز کردن فایل گزارش کنترل پانل را به '.' تغییر و مجددا ذخیره می کنیم

----------


## ariobarzan

سلام
به محض تغییر در تنظیم کنترل پنل  باوجودی که قبلش گزارش را باز کردم باز هم پیام خطا دیده میشه و اجازه ذخیره شدن نمیده  :گریه:

----------


## fahimi

با سلام 
من به ترتیب زیر انجام داده ام
1- تنظیمات کنترل پانل را "/" قرار دادم.
2- فایل گزارش Fr3  را باز کردم 
3- تنظیمات کنترل پانل را "."  تغییر دادم.
4- برای اینکه کلید ذخیره در دسترس قرارگیرد اندازه یکی از Memo را تغییر دادم  و گزارش را ذخیره  کردم 
روش بالا در ویندوز 10 و 7 تت کردم مشکلی پیش نیامد.

----------


## ariobarzan

سلام و تشکر
بمحض تغییر تنظیمات کنترل پانل از / به .  فست شروع میکنه به نمایش پیام خطا و اصلا مهلت نمیده که بخوام اندازه memo را تغییر بدم :متفکر:

----------


## hadisalahi2

ببخشید دوستان عزیز
این خطا مربوط به هیچ کدوم از موارد بالا نمیشه
این پیام مربوط به عدم سازگاری نسخه های 32 و 64 بیتی ویندوز با کامپوننت هستش

من یک گزارش در ویندوز 64 بیتی با نسخه 64 کامپایل کردم و هنگام اجرا در نسخه 32 بیتی این مشکل بوجود اومد
جالبه که دوباره تو نسخه 64 بیتی هم مجدد باز نشد

بعد از کلی کنکاش فهمیدم اون نسخه ای که با خود دلفی نصب میشه این مشکل رو داره
و وقتی نسخه کامل فست رو نصب کردم این مشکل حل شد

یا حق

----------


## danesh1351

من همین مشکل رو داشتم
فایل طراحی رو با notepad باز کن و تمام /  رو  با  .   جایگزین کن   
فقط دقت کن انتهای تگهای  xml    تغییر نکنه

----------


## parastoo48

مشکل مربوط به تابع تبدیل رشته به اعداد اعشاری در فست ریپورته. شما میتونید با روش زیر مشکل رو حل کنید
1-  frxutils.pas این فایل رو از پوشه fastreport  باز کنید
2- اینو پیدا کنید : :function frxStrToFloat(s: String): Extended
3- حالا [',', '.'] به این [',', '.','/'] تبدیل کنید
حالا با خیال راحت تو هر ویندوزی استفاده کنید
msalahia@yahoo.com

----------


## Mahmood_M

این مشکلات باید توسط متغیر عمومی FormatSettings حل بشه
در شروع برنامه فرمتهای دلخواه برای اعداد اعشاری و تاریخ و ... توسط این رکورد تعیین کنید تا در تمام سطح برنامه از همین فرمتها استفاده بشه و وابستگی برنامه به فرمتهای پیشفرض ویندوز از بین بره

----------


## benyaminrahimi

ممنونم از راهنمایی شما دوستان توجه داشته باشند که تو پروژه های بزرگ که یه حجمی گزارش طراحی شده و یه حجمی هم یوزر خودش گزارش طراحی کرده نمیشه بهش گفت 
رجیون رو بذار روی '/'  بعد گزارش رو باز کن بعد دوباره رجیون رو بذار روی '.'  ما هم این مشکل رو داشتیم چون تو پروژه ما تغیین جدا کننده اعشار دست خود کاربره decimal symbol ... 

ریطی هم به کامپوننت نداره فقط در سورس تولید کننده کامپوننت '/'وجود نداره   ... که با راهنمایی خوب ایشون حل شد 


function frxStrToFloat(s: String): Extended;
var
  i: Integer;
begin
  for i := 1 to Length(s) do
{$IFDEF Delphi12}
    if CharInSet(s[i], [',', '.','/']) then
{$ELSE}
    if s[i] in [',', '.','/'] then
{$ENDIF}
{$IFDEF Delphi16}
      s[i] := FormatSettings.DecimalSeparator;
{$ELSE}
      s[i] := DecimalSeparator;
{$ENDIF}
  while Pos(' ', s) <> 0 do
    Delete(s, Pos(' ', s), 1);
  Result := StrToFloat(s);
end;

----------


## MASAELI

> ممنونم از راهنمایی شما دوستان توجه داشته باشند که تو پروژه های بزرگ که یه حجمی گزارش طراحی شده و یه حجمی هم یوزر خودش گزارش طراحی کرده نمیشه بهش گفت 
> رجیون رو بذار روی '/'  بعد گزارش رو باز کن بعد دوباره رجیون رو بذار روی '.'  ما هم این مشکل رو داشتیم چون تو پروژه ما تغیین جدا کننده اعشار دست خود کاربره decimal symbol ... 
> 
> ریطی هم به کامپوننت نداره فقط در سورس تولید کننده کامپوننت '/'وجود نداره   ... که با راهنمایی خوب ایشون حل شد 
> 
> 
> function frxStrToFloat(s: String): Extended;
> var
>   i: Integer;
> ...


بسیار عالی بود
مشکل از اساس حل شد

----------


## hp1361

> بسیار عالی بود
> مشکل از اساس حل شد


 مشکل از اساس حل شد، اما اساسی حل نشده.

همانطور که آقای مهری گفتند، یک متغیر Global در برنامه های دلفی هست که فرمت ها رو تعیین میکنه بنام FormatSettings .

این متغیر فیلدهایی داره که برای تعیین فرمت موارد مختلفی چون تاریخ، واحد پول و ... داره.

فقط کافیه در رویدادی چون OnCreate فرم اصلی این کد رو برای تعیین فرمت ممیز شناور بنویسید:


FormatSettings.DecimalSeparator:='.';


البته شما بجای اون نقطه هرچیز دیگه ای هم میتونید بزارید. با این روش در تمام برنامه که شامل گزارش ها هم میشه، ممیز بصورت نقطه شناخته خواهد شد.

موفق باشیم

----------

