Избегание JSX и использование React.createElement решает эту проблему.
declare namespace Props {
interface Fruit {
price: number;
}
interface Banana extends Fruit {
curvature: number;
}
}
declare const Fruit: React.FC<Props.Fruit>;
declare const Banana: React.FC<Props.Banana>;
// ✅
const one: React.ReactComponentElement<typeof Fruit> = React.createElement(
Fruit,
{ price: 1000 }
);
// ✅
const two: React.ReactComponentElement<typeof Banana> = React.createElement(
Banana,
{ price: 1000, curvature: 12 }
);
/**
* ✅ Compile-time error.
* Type 'FunctionComponentElement<Banana>' is not assignable to type
* 'ReactComponentElement<FunctionComponent<Fruit>, Pick<PropsWithChildren<Fruit>, "price" | "children">>'.
* ...
* fruits.tsx(10, 5): 'curvature' is declared here.
*/
const three: React.ReactComponentElement<typeof Fruit> = React.createElement(
Banana
);
/**
* ✅ Compile-time error.
* Type 'FunctionComponentElement<Fruit>' is not assignable to type
* 'ReactComponentElement<FunctionComponent<Banana>,
* ...
* Types of property 'propTypes' are incompatible.
Это берет культуру, которую Вы дали и применение корректного форматирования. Вы обеспечили строку "0,009" и сказали ей, что это было испанским... затем, Вы жалуетесь, что она правильно интерпретировала его как испанский язык! Не говорите этому, что строка является испанской, когда Вы знаете, что это не.
Необходимо передать метод Синтаксического анализа культура проанализированной строки, который в этом случае был бы en-США или en-Гбитом или InvariantCulture.
У Вас есть он назад.
Когда Вы говорите double d = Double.Parse(s, new CultureInfo("es-ES"));
, Вы просите, чтобы.NET проанализировала Вашу строку в двойное, предположив, что строка записана в культуре es-ES.
В испанской культуре, "." тысячи разделителя, таким образом, "0.009" 9.
При преобразовании использования ToString (), в конце, это говорит, преобразовывают 0.009 в строку с помощью испанской культуры, таким образом, это использует"" как десятичный разделитель, и Вы добираетесь "0,009". Поведение корректно.
Мое предположение - то, что Вы хотите использовать Дважды. Синтаксический анализ с Инвариантной Культурой и ToString с испанской культурой, таким образом, 0.009 становится 0,009.
Вы путаете парсинг и форматирование. Вы добираетесь 9 вместо.009 в первый раз, потому что Вы берете строку, которая форматирована в культуре на основе., и проанализируйте ее с помощью a, - базирующаяся культура. Необходимо проанализировать его с помощью любой культуры, с которой это было создано, и затем отформатируйте его с помощью любой культуры, которую Вы хотите для дисплея.
Я думаю, что Вы интерпретируете его, неправильным путем вокруг, в культуре es-ES 0.009 является действительно просто длинный путь сказать 9 как "." не десятичный разделитель, поэтому если Вы просите строку "0.009" быть проанализированными с культурой es-ES, необходимо действительно получить deouble 9.0. Если Вы просите, чтобы это проанализировало "0,009", необходимо получить двойной из 0,009.
Точно так же, если Вы просите, чтобы это отформатировало двойные 0.009, необходимо получить строку "0,009" в es-ES.
double d = Double.Parse("0,009",
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
CultureInfo.CreateSpecificCulture("es-ES"));
В культуре es-ES"", десятичное число seporator (нет")
то, что пишет Джесс, мне нравится. только для тех, кому нужно опробовать, как получить "инвариантную культуру": это выглядит так
double d = Double.Parse (myString, CultureInfo.InvariantCulture);
(первая запись stackoverflow, так что да, скорее маргинальный;)