2012-02-18 4 views
1

StrToFloat 루틴에 문제가 있습니다. 내가 float로 문자열을 변환 할 때문자열 플로트/변환 부동

DecimalSeparator:='.'; 
anum:=StrToFloat('50.1123'); 
edt2.Text:=FloatToStr(anum); 

anum 50,1123과이된다 - 나는 다음과 같은 코드를 실행하면

독일어 (오스트리아)로 설정 국가 별 형식으로 윈도우 비스타에서 델파이 7을 실행하고 다시 변환 할 때 '50 .1123 '이됩니다.

어떻게 문자열을 부동 소수점으로 변환하면 소수점으로 쉼표가 아닌 소수점이 표시됩니다.

감사

콜린

+0

여기에서 달성하고자하는 것이 궁금합니다. 지역 설정이 무엇이든 관계없이 모든 사용자에게'.' 소수 구분 기호를 사용하지 않기를 바랍니다. –

+0

@David - 값을 확인할 때 나타납니다. 나는 단지 주위를 놀고 있었다. – colin

+0

@ 콜린 : 내 대답은 정확하다. –

답변

9

당신은 부동 소수점과 그것의 텍스트 표현의 차이 (즉, 문자열입니다) 감사합니다.

부동 소수점 숫자는 일반적으로 컴퓨터에 저장되어 있으므로 (예 : Delphi float 변수) 소수점 구분 기호가 없습니다. 그것의 텍스트 표현 만합니다. IDE에 anum이 '50, 1123 '으로 표시되면 이는 IDE 내부에서 숫자의 텍스트 표현을 만들 때 IDE가 컴퓨터의 로컬 지역 설정을 사용한다는 것을 의미합니다.

컴퓨터의 메모리에서 '50 .1123 '(또는 '50, 1123')을 선택하면 값이 1과 0으로 만 저장됩니다. 16 진수 표기법에서이 숫자는 9F AB AD D8 5F 0E 49 40으로 저장되며 표시 방법에 대한 정보는 포함되어 있지 않습니다. 돋보기를 잡고 RAM 모듈로 보내면 작고 작은 문자열 '50 .1123 '(또는 '50, 1123')을 찾을 수있는 것과는 다릅니다.

물론 번호를 사용자에게 표시하려면 FloatToStr을 사용하고 번호를 사용하여 문자 집합을 만듭니다. 결과는 '50 .1123 '또는 '50, 1123'또는 다른 것일 수 있습니다. (메모리에서이 문자열은 각각 35 30 2C 31 31 32 3335 30 2E 31 31 32 33 (ASCII)입니다.)

+0

@ Andreas 그래서 지역 설정을 독일어로 설정 했으므로 IDE에서 ','표시 만하고 있다고 생각하십니까? decimalseperator : = ','를 설정하면 코드를 실행할 때 변환 오류가 발생하여 어딘가에서 십진 분리자를 사용해야합니다? – colin

+0

예. * 프로그램과는 아무런 관련이 없습니다. IDE 만 있습니다. –

+0

소수 구분 기호 설정은 부동 소수점을 텍스트 표현으로 변환하거나 반대의 경우, 즉 컴퓨터가 문자열을 허용하고이를 부동 소수점 숫자로 해석하도록 요구할 때만 사용됩니다. 그런 다음 (물론) 컴퓨터는 소수점 구분 문자가 무엇인지 알아야합니다. –

관련 문제