首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript:将函数的输出更改为指定的小数位

javascript:将函数的输出更改为指定的小数位
EN

Stack Overflow用户
提问于 2016-10-07 12:16:31
回答 1查看 152关注 0票数 1

我的javascript不是很好,但是最近我需要使用一个库来输出一个聚合表。使用的是fin-hypergrid

有一部分我需要将一个sum函数(本例中为rollups.sum(11))插入到一个对象中,以便它可以在表中计算聚合值,如下所示:

代码语言:javascript
复制
aggregates = {Value: rollups.sum(11)}

我想将此值更改为返回两位小数,并尝试:

代码语言:javascript
复制
rollups.sum(11).toFixed(2)

但是,它会给出错误:"rollups.sum(...).toFixed不是一个函数“

如果我尝试像这样的东西:

代码语言:javascript
复制
parseFloat(rollups.sum(11)).toFixed(2)

它抛出错误:"can't assign to properties of (new String("NaN")):not a object“

所以它必须是一个函数对象。

我想知道是否有一种方法可以修改函数rollups.sum(11)来返回一个有两位小数的函数对象?

(附带信息: rollups.sum(11)来自一个模块,该模块提供:

代码语言:javascript
复制
sum: function(columnIndex) {
    return sum.bind(this, columnIndex);
}

)

很抱歉,由于数据机密性问题,我无法在此处发布样本输出。但是,下面是我所遵循的示例中的代码。我基本上需要更改rollups.whatever来给出小数位数。sum(11)中的"11“指的是”列索引“。

代码语言:javascript
复制
window.onload = function() {

var Hypergrid = fin.Hypergrid;
var drillDown = Hypergrid.drillDown;
var TreeView = Hypergrid.TreeView;
var GroupView = Hypergrid.GroupView;
var AggView = Hypergrid.AggregationsView;

// List of properties to show as checkboxes in this demo's "dashboard"
var toggleProps = [{
        label: 'Grouping',
        ctrls: [
            { name: 'treeview', checked: false, setter: toggleTreeview },
            { name: 'aggregates', checked: false, setter: toggleAggregates },
            { name: 'grouping', checked: false, setter: toggleGrouping}
        ]
    }
];

function derivedPeopleSchema(columns) {
    // create a hierarchical schema organized by alias
    var factory = new Hypergrid.ColumnSchemaFactory(columns);
    factory.organize(/^(one|two|three|four|five|six|seven|eight)/i, { key: 'alias' });
    var columnSchema = factory.lookup('last_name');
    if (columnSchema) {
        columnSchema.defaultOp = 'IN';
    }
    //factory.lookup('birthState').opMenu = ['>', '<'];
    return factory.schema;
}

var customSchema = [
    { name: 'last_name', type: 'number', opMenu: ['=', '<', '>'], opMustBeInMenu: true },
    { name: 'total_number_of_pets_owned', type: 'number' },
    { name: 'height', type: 'number' },
    'birthDate',
    'birthState',
    'employed',
    { name: 'income', type: 'number' },
    { name: 'travel', type: 'number' }
];

var peopleSchema = customSchema;  // or try setting to derivedPeopleSchema

var gridOptions = {
        data: people1,
        schema: peopleSchema,
        margin: { bottom: '17px' }
    },
    grid = window.g = new Hypergrid('div#json-example', gridOptions),
    behavior = window.b = grid.behavior,
    dataModel = window.m = behavior.dataModel,
    idx = behavior.columnEnum;

console.log('Fields:');  console.dir(behavior.dataModel.getFields());
console.log('Headers:'); console.dir(behavior.dataModel.getHeaders());
console.log('Indexes:'); console.dir(idx);

var treeView, dataset;

function setData(data, options) {
    options = options || {};
    if (data === people1 || data === people2) {
        options.schema = peopleSchema;
    }
    dataset = data;
    behavior.setData(data, options);
    idx = behavior.columnEnum;
}

// Preset a default dialog options object. Used by call to toggleDialog('ColumnPicker') from features/ColumnPicker.js and by toggleDialog() defined herein.
grid.setDialogOptions({
    //container: document.getElementById('dialog-container'),
    settings: false
});

// add a column filter subexpression containing a single condition purely for demo purposes
if (false) { // eslint-disable-line no-constant-condition
    grid.getGlobalFilter().columnFilters.add({
        children: [{
            column: 'total_number_of_pets_owned',
            operator: '=',
            operand: '3'
        }],
        type: 'columnFilter'
    });
}

window.vent = false;

//functions for showing the grouping/rollup capabilities
var rollups = window.fin.Hypergrid.analytics.util.aggregations,
    aggregates = {
        totalPets: rollups.sum(2),
        averagePets: rollups.avg(2),
        maxPets: rollups.max(2),
        minPets: rollups.min(2),
        firstPet: rollups.first(2),
        lastPet: rollups.last(2),
        stdDevPets: rollups.stddev(2)
    },
    groups = [idx.BIRTH_STATE, idx.LAST_NAME, idx.FIRST_NAME];

var aggView, aggViewOn = false, doAggregates = false;
function toggleAggregates() {
    if (!aggView){
        aggView = new AggView(grid, {});
        aggView.setPipeline({ includeSorter: true, includeFilter: true });
    }
    if (this.checked) {
        grid.setAggregateGroups(aggregates, groups);
        aggViewOn = true;
    } else {
        grid.setAggregateGroups([], []);
        aggViewOn = false;
    }
}

function toggleTreeview() {
    if (this.checked) {
        treeView = new TreeView(grid, { treeColumn: 'State' });
        treeView.setPipeline({ includeSorter: true, includeFilter: true });
        treeView.setRelation(true, true);
    } else {
        treeView.setRelation(false);
        treeView = undefined;
        delete dataModel.pipeline; // restore original (shared) pipeline
        behavior.setData(); // reset with original pipeline
    }
}

var groupView, groupViewOn = false;
function toggleGrouping(){
    if (!groupView){
        groupView = new GroupView(grid, {});
        groupView.setPipeline({ includeSorter: true, includeFilter: true });
    }
    if (this.checked){
        grid.setGroups(groups);
        groupViewOn = true;
    } else {
        grid.setGroups([]);
        groupViewOn = false;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-10-07 15:17:03

您可以尝试:

代码语言:javascript
复制
(rollups.sum(11)).toFixed(2)

将数字括在括号中似乎会使浏览器绕过标识符不能紧跟在数字文字之后的限制

编辑#2:

代码语言:javascript
复制
//all formatting and rendering per cell can be overridden in here
dataModel.getCell = function(config, rendererName) {
    if(aggViewOn)
    {
        if(config.columnName == "total_pets")
        {
            if(typeof(config.value) == 'number')
            {
                config.value = config.value.toFixed(2);
            }
            else if(config.value && config.value.length == 3 && typeof(config.value[1]) == 'number')
            {
                config.value = config.value[1].toFixed(2);
            }
        }
    } 
    return grid.cellRenderers.get(rendererName);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39909290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档