/ / C # Номер формат занимаващи се с групиране на цифри - c #, номера, cultureinfo

C # формат на числата, който се занимава с групиране на цифри - c #, числа, cultureinfo

Срещнах проблем с 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 #