Срещнах проблем с C # (и Java) наанализ / валидиране на цифрово форматиране, чувствително към културата. Изглежда, когато става дума за групиране на цифри, сепараторът може да бъде поставен навсякъде в .NET. Има ли начин да се наложи стриктно спазване на използването на цифровото групиране? Например, вижте следното:
Decimal.Parse("9,0"); /// Returns 90, which is wrong
Decimal.Parse("90,00"); /// Returns 9000, which is wrong
Decimal.Parse("9,000"); /// Returns 9000, which is right
За да усложни нещата, културите се различават по броя на цифрите в група.
Някакви предположения?
Редактиране: Беше предложено да добавя CultureInfo в Parse (), но това все още не работи правилно. Например:
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); /// Murican English
Double.Parse("9,0", culture); /// Returns 90 when it should throw an exception
culture = CultureInfo.CreateSpecificCulture("pt-BR"); /// Brazillian Portuguese
Double.Parse("9.0", culture); /// Returns 90 when it should throw an exception
Отговори:
0 за отговор № 1можете да намерите информация за анализа в тук като употреба CultureInfo culture
както се вижда в примера в връзката
например
culture = CultureInfo.CreateSpecificCulture("en-US");
number = Double.Parse(value, culture);// 1,304.16 --> 1304.16
но "en-US" не може да анализира 1 304,16 "." fr-FR "може да -> ще получите 1304,16
0 за отговор № 2
Трябва да посочите CultureInfo, тъй като резултатите от анализа са зависима от културата например
// English, United States:
// "," is a thousand but not decimal separator, decimal separator is "."
// d1 = 90 since "," is NOT a decimal separator
Decimal d1 = Decimal.Parse("9,0", new CultureInfo("en-US")); // <- 90
// Russian, Russia:
// "," is a decimal separator
// d2 = 9.0 since "," is a decimal separator
Decimal d2 = Decimal.Parse("9,0", new CultureInfo("ru-RU")); // <- 9.0
0 за отговор № 3
За правилния анализ на номерата вие определено се нуждаете от информацията за културата на източника на номера. Виж това Разглеждайки номера от различни култури в C #