Как я работаю вокруг parseInt восьмеричного поведения JavaScript?

Вам необходимо внести следующее изменение. Вместо

WHEN [CONTAINER INSTANCE DIMENSION].[Container Size] = '20' 

вам нужно написать

WHEN [CONTAINER INSTANCE DIMENSION].[Container Size].CurrentMember.MEMBER_CAPTION = '20'.

. В вашем запросе вы хотите выбрать свой множитель на основе значения размера контейнера. Чтобы получить значение, которое оценивается в данный момент, мы используем «Currentmember». Кроме того, вы проверяете свойство «MEMBER_CAPTION» вашего CURRENTMEMBER. Способ проверки значения не будет работать. MDX оценит

[CONTAINER INSTANCE DIMENSION].[Container Size] = '20'

как true, поскольку вы сравниваете атрибут измерения со значением. Следовательно, ваше предложение Else дает результат.

Ниже приведен пример AdventureWorks.

with member 
[Measures].[Internet Sales AmountCase]
as
case 
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '38' then [Measures].[Internet Sales Amount]*1
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '40' then [Measures].[Internet Sales Amount]*2
when [Product].[Size].CurrentMember.MEMBER_CAPTION = '46' then [Measures].[Internet Sales Amount]*3
else -99
end

select 
{[Measures].[Internet Sales Amount],[Measures].[Internet Sales AmountCase]}
on columns,

([Date].[Month of Year].[Month of Year],[Product].[Size].[38]:[Product].[Size].[70])
on rows 
from [Adventure Works]

Результаты: enter image description here

280
задан cнŝdk 15 December 2015 в 22:35
поделиться

7 ответов

Это обычная ошибка Javascript с простым решением:

Просто укажите основание или «основание системы счисления», например:

parseInt('08',10); // 8

Вы также можете использовать Число :

Number('08'); // 8
324
ответ дан 23 November 2019 в 02:00
поделиться

Эта проблема не может копироваться в последнем Chrome, ни Firefox (2019).

0
ответ дан 23 November 2019 в 02:00
поделиться

Из документации parseInt используйте необязательный аргумент radix, чтобы указать основание-10:

parseInt('08', 10); //equals 8
parseInt('09', 10); //equals 9

Это мне кажется педантичен, запутан и многословен (действительно, дополнительный аргумент в каждом parseInt?), поэтому я надеюсь, что есть лучший способ.

24
ответ дан 23 November 2019 в 02:00
поделиться
function parseDecimal(s) { return parseInt(s, 10); }

edit: создание вашей собственной функции для выполнения того, что вы действительно хотите, - это просто вариант, если вам не нравится постоянно добавлять ", 10" к вызову parseInt (). Его недостатком является нестандартная функция: для вас удобнее, если вы используете его часто, но, возможно, больше запутывает других.

11
ответ дан 23 November 2019 в 02:00
поделиться

Укажите базу:

var number = parseInt(s, 10);
10
ответ дан 23 November 2019 в 02:00
поделиться

Было бы очень непослушно заменить parseInt версией, предполагающей десятичное число, если у нее нет второго параметра? (примечание - не тестировалось)

parseIntImpl = parseInt
parseInt = function(str, base){return parseIntImpl(str, base ? base : 10)}
7
ответ дан 23 November 2019 в 02:00
поделиться
[

] Если вы [] знаете [], что ваше значение будет в подписанном 32-битовом целочисленном диапазоне, то []~~x[] сделает все правильно во всех сценариях. [

] [
~~"08" === 8
~~"foobar" === 0
~~(1.99) === 1
~~(-1.99)  === -1
] [

]Если вы ищете двоичное не ([]~[]), то спецификация требует преобразования "ToInt32" для аргумента, который делает очевидное преобразование в Int32 и указан, чтобы принудить []NaN[] значения к нулю.[

] [

]Да, это невероятно хакерское решение, но так удобно...[

].
43
ответ дан 23 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: