C #에서 문자열을 부동 소수점으로 변환


108

"41.00027357629127"과 같은 문자열을 변환하고 있으며 사용하고 있습니다.

Convert.ToSingle("41.00027357629127");

또는

float.Parse("41.00027357629127");

이러한 메서드는 4.10002732E + 15를 반환 합니다.

float로 변환 할 때 "41.00027357629127"을 원합니다. 이 문자열은 동일해야합니다 ...


1
그 방법은 수를 표시하는있다 - 당신은 어떻게이 변환됩니다 무엇을 알 수 있습니까
MMMMMM

1
왜 ToSingle인지 아십니까? 그리고 ToFloat가 아닌가요?
Lord Darth Vader

41.00027357629127은 과학 표기법에서 4.10002732E + 15가 될 수 없습니다. 물론 문화에서 소수점 대신 소수점 쉼표 (및 천 단위 구분 기호로 점)를 사용하지 않는 한, 숫자는 실제로 다음과 같이 표시됩니다. 4100027357629127 결과적으로 4.10002732E + 15
ljgww

답변:


229

스레드의 로케일은 소수점이 "."대신 ","로 설정됩니다.

이것을 사용해보십시오 :

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

그러나 float는 그만큼의 정밀도를 보유 할 수 없습니다. 그렇게하려면 double 또는 Decimal을 사용해야합니다.


35
네임 스페이스를 추가하는 것을 잊지 마세요 using System.Globalization;액세스CultureInfo
Mobiletainment

24

첫째, 디버거에서 볼 수 있는 숫자 의 표현 일뿐 float입니다. 실제 값은 약 정확한 (만큼 그것이 가능으로)입니다.

참고 : 부동 소수점 숫자와 문자열을 다룰 때는 항상 CultureInfo 정보를 사용하십시오 .

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

이것은 단지 예일뿐입니다. 귀하의 사례에 적합한 문화를 선택하십시오.


내 CultureInfo를 어떻게 선택할 수 있습니까? TR-TR을 추가 할 터키에 있습니다.
Mehmet

1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow

20

다음을 사용할 수 있습니다.

float asd = (float) Convert.ToDouble("41.00027357629127");

4
이것이 정답 인 이유에 대한 컨텍스트를 제공하십시오.
Bas Peeters 2014


4

float 의 정밀도 는 7 자리입니다. 전체 로트를 유지하려면 15-16 자리 숫자를 유지 하는 이중 유형 을 사용해야합니다 . 서식에 대해서는 doubles 서식 에 대한 게시물을 참조하십시오 . 그리고 C #의 소수 구분 기호에 대해 걱정할 필요가 있습니다.


ı 피곤 double.Parse이 너무 나쁜 4100027357629127.0을 반환
메 흐멧

2
이것은 '.'처럼 들립니다. 문자가 로케일의 소수점 구분 기호가 아닙니까? 확인 stackoverflow.com/questions/3870154/c-sharp-decimal-separator
JPE

0

당신은 할 수 있습니다 double.Parse("41.00027357629127");


나는 그가 그것을 어떻게 둥글게하는지 묻는다고 생각하지 않는다.
OR 매퍼

-2

더 정확한 값을 얻으려면 float 대신 double로 구문 분석을 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.