選択肢IDを数値として合計したい

コメント

5件のコメント

  • Avatar
    Hirotaka NISHI (Questetra Support)

    null 判定の前に、null オブジェクトで get() を呼び出そうとしてしまっているのがエラーの原因だと思います。

     //選択肢がnullの場合は0
      const select = engine.findDataByVarName(value).get(0);
      if(typeof select === "null"){

     

    次のようなコードではどうでしょうか。
    (typeof null は "object" なので書き換えています。)

     //選択肢がnullの場合は0
    const selects = engine.findDataByVarName(value);
    let select;

    if(selects == null){
    ...
    } else {
    select = selects.get(0);
    }
    0
    コメントアクション パーマリンク
  • Avatar
    品川 武志

    返信ありがとうございます。

    色々試行錯誤して、下記のようにJSONにしてからnullを判定していましたが、そのままいけそうですね。

    function toNumber(value){
    const selects = engine.findDataByVarName(value);

      //選択肢がnullの場合は0
    if(JSON.stringify(selects)=== "null"){
      return 0;
    }

      //文字を数値に変換
    result = parseFloat(selects.get(0).getValue());

      //数値に変換できない文字の場合は0
    if(isNaN(result)){
      return 0;
    }

      return result
    }

     

    もう1点困りごとがあります。

    engine.setDataByVarName("q_number55", new java.math.BigDecimal(score1 +''));
    これが「3.5」などの小数の場合に整数になってしまいます。
    何か良い解決策はないでしょうか。
     

     

    0
    コメントアクション パーマリンク
  • Avatar
    品川 武志

    ※その他、細かい(?)間違いがたくさんありますが見なかった事にしてください(「=+など」)

    0
    コメントアクション パーマリンク
  • Avatar
    品川 武志

    すみません。自己解決しました。

    データ項目の小数点以下の桁数を変えたらうまくいきました。

    0
    コメントアクション パーマリンク
  • Avatar
    Hirotaka NISHI (Questetra Support)

    > データ項目の小数点以下の桁数を変えたらうまくいきました。

    そうですね。
    データ項目の定義に従った桁数での保存になるので、想定される値の精度に応じた定義が必要ですね。

    0
    コメントアクション パーマリンク

サインインしてコメントを残してください。