3

Delphi6アプリケーションの海外ユーザーの少なくとも一部に影響を及ぼしている奇妙な問題が発生しています。シナリオは次のとおりです。

  • 私のプログラムは、HTTPサーバーとして機能する外部デバイスから定期的にステータスレポートを要求します。
  • デバイスは、名前と値のペアの形式でパイプ文字で区切られた一連のフィールドを持つ応答ドキュメントとしてステータスレポートを送り返します(例:--field1 = -0.437)。
  • レポート文字列をフィールドに分割してから、もう一度各フィールド名と数値を取得します。
  • StrToFloat()を使用して、浮動小数点フィールドの値を文字列形式に変換し、その関数の結果をVariant変数に割り当てます。

これはほとんどのPCで正常に機能しますが、数値でStrToFloat()を使用しようとすると、一部の海外ユーザーにEConvertErrorが発生します。これが私のログからのエラーメッセージの具体例です:

EConvertError:'-0.685'は有効な浮動小数点値ではありません

ご覧のとおり、-0.685有効な浮動小数点数ですが、EConvertError例外が発生しています。通常、小数点がある場所にコンマが表示されるか、その他のロケール固有の句読点の問題が発生することが予想されますが、この場合、数値は正常に表示されます。また、私の知る限り、外部デバイスには文字セットを設定するオプションさえありません。

では、Delphi 6と国際的な文字セットに関する微妙なニュアンスがこの問題を引き起こしている可能性があります。おそらく、ユーザーのWindows XP/Win7の文字設定に関連しているのでしょうか。プログラム全体で標準のDelphi6" string "キャスト文字列を使用しているため、マルチバイト文字セットの問題が根本的な原因である可能性がないことに注意してください。誰かがこの問題を抱えていて、それについて何をすべきか知っていますか?

4

2 に答える 2

8

リモート ユーザーのマシンは,、小数点記号を期待しています。例外が発生すると.EConvertError例外が発生します。,小数点として期待するマシン(たとえば、ほとんどのヨーロッパおよび南アメリカの国)-0.685では、実際には有効な浮動小数点値ではありません。

通常、小数点の位置にコンマが表示されるか、その他のロケール固有の句読点の問題が発生すると予想されますが、この場合、数値は正常に表示されます。

あなたの現在の問題は、上記の問題の裏返しです。通常、使用しているロケール.では区切り記号として使用されるため、代わりに data with を使用すると問題が発生することに慣れています,,セパレータとして使用する国の誰かの立場に身を置く. 彼らにとっては、データを使用したときに例外が発生することに慣れているでしょう.


マシンのロケールと同じ小数点記号を使用するように入力を正規化することで、問題を解決できます。最新の Delphi ではStrToFloat、パラメータを受け取るオーバーロードを使用して問題を解決し、それをこの変換の小数点として使用TFormatSettingsすることを明示的に指定できます。.残念ながら、その機能は Delphi 6 では利用できません。

于 2012-03-27T18:58:35.477 に答える
1

私はベルギーのユーザーにとってこの問題に直面しました。また、手動で「。」を置き換える必要がありました。または入力データの「、」。また、データベース(sql)にデータを挿入する場合は、「、」を「。」に置き換える必要があります。データベースへのデータの挿入中。

于 2012-03-28T11:12:20.003 に答える