V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
MrdotX
V2EX  ›  程序员

有个金额数据加千分位是应该前端处理还是后端处理好?

  •  
  •   MrdotX · 57 天前 · 2334 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天开发遇到一个场景,前端页面里涉及金额的字段要增加千分位逗号,数据要做下处理,

    我的疑问是,这个处理应该前端来做还是后端来做?

    宝子们给点意见

    先说下我自己的看法,我是前端的,所以我偏向前端只做交互和渲染,不做数据处理,应该后端处理数据, 你们怎么看?

    第 1 条附言  ·  57 天前
    楼主遇到的场景是前端 H5 ,目前已经妥协进行前端处理了..

    此贴沉了,感谢各位的发言~
    49 条回复    2022-08-08 22:52:42 +08:00
    vikaptain
        1
    vikaptain  
       57 天前   ❤️ 16
    前端处理。这不是数据处理问题,是数据显示问题
    abc0123xyz
        2
    abc0123xyz  
       57 天前   ❤️ 1
    只要不让我处理就好
    stoluoyu
        3
    stoluoyu  
       57 天前   ❤️ 1
    撕逼输了的处理
    lingxiaoli
        4
    lingxiaoli  
       57 天前
    当然是前端来处理了 1 楼说的对 这是显示问题
    ngrok111
        5
    ngrok111  
       57 天前
    前端,就像一楼说的这是显示问题,后端给纯数字你想怎么改都行
    cydysm
        6
    cydysm  
       57 天前 via iPhone
    就一个字段的话 前端
    当然后端可以给个展示用的字段
    MrdotX
        7
    MrdotX  
    OP
       57 天前
    @vikaptain
    @lingxiaoli
    @cydysm 那如果像是金额精度处理呢,应该前端还是后端处理?
    thinkershare
        8
    thinkershare  
       57 天前
    屁股决定脑袋, 当然是希望将所有工作对推给对方做.
    正常情况, 没有 BFF 肯定是所作都可以, 这个一个数据显示为什么样的样式, 更合理的当然是前端来做.
    laviris
        9
    laviris  
       57 天前
    无论从哪个角度看都是前端处理
    daimubai
        10
    daimubai  
       57 天前
    数据显示问题当然是前端改。和时间一样的。后端给前端时间戳,前端展示年月日也好,时分秒也好
    des
        11
    des  
       57 天前 via iPhone
    当然是前端处理,这有什么疑惑的?
    thinkershare
        12
    thinkershare  
       57 天前   ❤️ 1
    @MrdotX 金额进度当然是后端处理, 不过一般不会设计到精度, 因为我们总是使用比分还要小 2 个数量级的单位, 根本就不使用小数存储金额, 而是直接使用 long
    huiyadanli
        13
    huiyadanli  
       57 天前
    金额精度后端处理
    金额展示前端处理
    Cu635
        15
    Cu635  
       57 天前
    “我偏向前端只做交互和渲染,不做数据处理”

    说的对,千分位就是数据显示问题,可以说是“渲染”,而实际的数据完全是不涉及的,所以 lz 问题的回答就是“应该前端处理”。类似的还有小数点是用逗号还是圆点,小数部分是不是要缩小一个字号这种问题。
    lz 可以这么想一下:如果数据不再用逗号做千分位了,而是用空格,那么数据是不是就变化了?是不是 1 000!=1,000 ?
    lingxiaoli
        16
    lingxiaoli  
       57 天前
    @MrdotX #7 你说的精度是指分? 后端存的时候就是按分存的 给前端的时候前端按 ui 以及业务要求来做相应处理
    ecloud
        17
    ecloud  
       57 天前
    @Cu635 德国的小数点跟逗号就是反着用的,这本质上叫做 localization
    Jooooooooo
        18
    Jooooooooo  
       57 天前
    后端做的好处是, 能更灵活的去调整这个展示的样式.

    前端只单纯展示一个字符串.
    damai0419
        19
    damai0419  
       57 天前
    这种偏向前端处理。
    像金额类的,后端基本要保存为币种的最小单位。
    这串数字反给前端,前端怎么展示,很可能不同的终端不一样。¥ 1 ,000 ;一千元;壹仟元; 1000 元 等等的。
    ecloud
        20
    ecloud  
       57 天前
    @MrdotX 精度问题,最好让后端改成用 long 存储,然后再给你返回一个 point (小数位)。比如 (1234567|point=3) => 1234.567 (分隔符取决于 locale )
    wangtian2020
        21
    wangtian2020  
       57 天前
    后端提供原始数据,前端负责格式化显示
    如果仅做一处数据的显示,也能后端提供
    Routeros
        22
    Routeros  
       57 天前
    我赞成前端做
    MrdotX
        23
    MrdotX  
    OP
       57 天前
    Fine.. 领导说要前端做。。
    MrdotX
        24
    MrdotX  
    OP
       57 天前
    沉了沉了
    GeorgeGalway
        25
    GeorgeGalway  
       57 天前   ❤️ 3
    我们前端是个美丽的小姐姐,所以当然是我大后端处理
    fzdwx
        26
    fzdwx  
       57 天前
    @Jooooooooo #18

    `后端做的好处是,能更灵活的去调整这个展示的样式`

    不是应该是前端做,才更灵活吗?后端都直接把需要渲染好的数据返回了,怎么会是灵活的?
    wccc
        27
    wccc  
       57 天前
    如果是美丽小姐姐,那就我来
    wccc
        28
    wccc  
       57 天前
    前端修改比较合适,毕竟只是格式处理
    Jooooooooo
        29
    Jooooooooo  
       57 天前
    @fzdwx 如果是客户端, 你还得发版等着用户去用户商店更新才能生效. 咋会更灵活.
    fzdwx
        30
    fzdwx  
       57 天前
    @Jooooooooo

    客户端这种场景,我确实接触的比较少。。。
    fkdtz
        31
    fkdtz  
       57 天前
    OP 身为一名前端,此时正在处理
    Morii
        32
    Morii  
       57 天前
    @Jooooooooo #18

    现在前端格式化库我觉得比后端灵活多了吧
    otakustay
        33
    otakustay  
       57 天前
    金额加逗号显然是渲染的事,你作为前端就算只做交互和渲染,也应该把这事做了
    Jooooooooo
        34
    Jooooooooo  
       57 天前
    @Morii 我说的灵活是指更新的灵活, 不是实现上的灵活, 具体的逻辑看下 29l
    Morii
        35
    Morii  
       57 天前
    @Jooooooooo #34

    soga ,我一直考虑的是 web 端,如果是客户端的话,我赞同
    arch9999
        36
    arch9999  
       57 天前
    @Morii

    什么端,这个都是前端做。
    hayvane
        37
    hayvane  
       57 天前
    前端处理,另外 [我偏向前端只做交互和渲染,不做数据处理] ,其实,在实际工作中,有时候前端也是要做数据处理的
    我也是前端( app+小程序)
    yaphets666
        38
    yaphets666  
       57 天前
    写个处理函数就行,咱是按天算钱的,不计件,多干点活没事,只要不加班就行.
    cnoder
        39
    cnoder  
       57 天前
    理论上输入和输出格式要一致,你觉得你给后端金额的时候会传 100,454.21 这种数据吗
    fernandoxu
        40
    fernandoxu  
       57 天前
    Intl.NumberFormat
    janda
        41
    janda  
       57 天前
    金额计算 - 后端
    金额显示 - 前端
    h1104350235
        42
    h1104350235  
       57 天前
    显示问题,一般是前端处理。
    像这个数据结构的话,我一般会抽出个方法处理。
    phobal
        43
    phobal  
       57 天前 via iPhone
    一行代码的事儿 Number.prototype.toLocaleString()
    adjusted
        44
    adjusted  
       57 天前
    后端,前端多个平台所有人都得改一遍
    kkfnui
        45
    kkfnui  
       57 天前
    zjuster
        46
    zjuster  
       57 天前
    前端处理。
    用实际例子说一下,德国等国家的的千分号单位是“.”或者空格,小数是“,”。
    德国 123 456 479, 00 或者 123.456.789,00
    我国 123,456,789.00
    为了适应当地的习惯和策略,前端展示上不同,但对账的时候的数值大小是一致的。

    所以前端做展示,后端提供统一的财务数据比较合适。
    zhuweiyou
        47
    zhuweiyou  
       57 天前
    前端处理,因为金额可能会做计算,比如*数量=总价,你后端返回带逗号的,你怎么做计算?
    godblessumilk
        48
    godblessumilk  
       56 天前
    必须是前端处理。因为你的系统以后可能会拓展到全世界,到时候有的用户用美元、有的用户用欧元做单位,你让后端全给你算一次吗?还有,关于时间的显示,一律让后端只返回时间戳,不可以返回处理好了格式的日期,因为你永远不知道你的前端用户在哪个时区
    Cu635
        49
    Cu635  
       53 天前
    @ecloud #17
    说的对对,只不过我个人很不喜欢这种不统一又没有实际意义的人为差别,所以宁可跟着 lz 用“渲染”这个关键字。

    @GeorgeGalway #25
    既然是美丽的小姐姐是前端,不更应该让前端处理么,遇到问题了可以上去交流啊。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1049 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 19:00 · PVG 03:00 · LAX 12:00 · JFK 15:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.