1

XML ファイルのノードから浮動小数点属性値を読み取っていますTXMLDocument

<MyApp_Favorites version="1.0">

...このステートメントで:

var
  ThisRootNode: IXMLNode;
  ThisVersion: Single;

// ...

ThisVersion := ThisRootNode.Attributes['version'];
CodeSite.Send('ThisVersion', ThisVersion);

ただし、私のドイツ語システムでは、次のバージョン値を取得します。

このバージョン = 10,00

...私の地域設定のように、ドット「。」ではなく、コンマ「、」が小数点記号として定義されています。XML ファイルのように。しかし、英語の地域設定 (ドットが小数点の設定として定義されている可能性が最も高い場所) では、結果は "1.0" として正しくなります。

では、地域の設定とは別に、読み取り値の1.0が常に同じであることを確認するにはどうすればよいでしょうか? (バージョン値を文字列として読み取り、それを float に変換するのは、あまり洗練された方法ではないようです)。

4

3 に答える 3

5

文字列表現を使用し、次を使用して自分で変換を行いますTFormatSettings.Invariant

ThisVersion := StrToFloat(ThisRootNode.Attributes['version'], TFormatSettings.Invariant);
于 2016-12-19T15:20:50.703 に答える
2

この値は、浮動小数点値として扱われるべきではありません。バイナリ浮動小数点型の表現に関する問題に直面します。文字列を読み取り、メジャー部分とマイナー部分を解析して、 で整数に変換する方がはるかに優れていますStrToIntPosピリオド区切りの位置を見つけるために使用するか、実際には任意の関数を使用して、文字列自体を分割しSplitます。

一方、この値が文字列以外の形式で必要であることは明らかではありません。では、わざわざ文字列として読み取る以上のことをする必要はありません。

StrToFloatあなたが尋ねた実際の質問に関しては、パラメータを受け入れるオーバーロードを使用したい場合がありTFormatSettingsます。そして、小数点記号を として設定するフォーマット設定を渡します'.'

于 2016-12-19T14:41:18.727 に答える