제가 적용 특정 CultureInfo
에 번호를 정상화하려고 사투를 벌인거야 10 진수가 포함 된 문자열의 NumberFormat
표준화 특정 CultureInfo.NumberFormat
의 내가 일부 문자가 포함 된 문자열을 있다고 가정 해 봅시다, 그래서 그것을 청소해야합니다 그래서 기본적으로 ,
'
및 .
유지하고있어
var cleanedInput = Regex.Replace(userInput, @"[^0-9-,'.]+", "");
합니다. 나는 CultureInfo
에 따라 ,
과 .
이 십진법을 분리하거나 숫자를 그룹화하는 데 다르게 사용되기 때문에이 작업을 수행하고 있습니다. 그걸 염두에 데
, 나는 소수를 허용하도록 NumberStyle
을 지정 Decimal.TryParse
방법을 적용하고 IFormatProvider
는 dinamically CultureInfo.NumberFormat
원하는 "로컬"에 적용 할 예정이다.
decimal numericData;
if (!decimal.TryParse(cleanedInput, NumberStyles.AllowDecimalPoint, LocaleUser.NumberFormat, out numericData))
throw new Exception($"Error occurred. Could not parse:{cleanedInput} ");
"hi9000,99hi"
을 입력한다고합시다. 일단 청소하면 "9000,99"
이됩니다. 좋은. 그렇다면 TryParse
을 적용하고 Decimal
9000.99
을 반환합니다. 중요한 것은 실제로 es-ES
CultureInfo
을 적용하고 있으며 소수점 구분자로 ,
을가집니다. 나는 기본적으로 9000,99
또는 9.000,99
을 기대하고 있습니다.
코드는 Exception
을 발생시키지 않지만 지정된 CultureInfo
을 적용하지 않는 것 같습니다.
정확히 무엇이 누락 되었습니까? 나는 Decimal.TryParse
이 내가 잘 다루는 스위스 육군 칼이라는 느낌을 가지고있다.
미리 감사드립니다.
나는 문제가 무엇인지 정확히 모르겠지만, 소수가 형식을 _have_되지 않는다는 점에 유의해야합니다. 값을 표시 할 때 형식을 제공합니다. 디버거에서보고있는 경우 컴퓨터가 설정된 문화권을 사용합니다. 값을 특정 형식으로 보려면'decimal.ToString' 또는'string.Format'을 사용하십시오. –
명확히하기 위해 제공하는 코드에서 예외가 발생하고 있습니까? 그리고'cleanedInput'은 파서에 가기 전에 당신이 기대하는 것입니까? –
답장 보내 주셔서 감사합니다. 이 코드는 예외를 발생시키지 않지만, 내가 얻은 결과는 내가 지정한 CultureInfo를 적용하지 않고, 디버깅중인 VS2015를 사용하는 CultureInfo조차도 적용하지 않는다. – Gonzo345