有个金额数据加千分位是应该前端处理还是后端处理好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
MrdotX
V2EX    程序员

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

  •  
  •   MrdotX 2022-08-04 10:39:04 +08:00 4071 次点击
    这是一个创建于 1173 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    宝子们给点意见

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

    第 1 条附言    2022-08-04 13:44:19 +08:00
    楼主遇到的场景是前端 H5 ,目前已经妥协进行前端处理了..

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

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

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

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

    不是应该是前端做,才更灵活吗?后端都直接把需要渲染好的数据返回了,怎么会是灵活的?
    fkmc
        27
    fkmc  
       2022-08-04 11:03:56 +08:00
    如果是美丽小姐姐,那就我来
    fkmc
        28
    fkmc  
       2022-08-04 11:05:09 +08:00
    前端修改比较合适,毕竟只是格式处理
    Jooooooooo
        29
    Jooooooooo  
       2022-08-04 11:07:41 +08:00
    @fzdwx 如果是客户端, 你还得发版等着用户去用户商店更新才能生效. 咋会更灵活.
    lllllliiii
        30
    lllllliiii  
       2022-08-04 11:45:43 +08:00
    @Jooooooooo

    客户端这种场景,我确实接触的比较少。。。
    fkdtz
        31
    fkdtz  
       2022-08-04 12:08:13 +08:00
    OP 身为一名前端,此时正在处理
    28Sv0ngQfIE7Yloe
        32
    28Sv0ngQfIE7Yloe  
       2022-08-04 12:11:49 +08:00
    @Jooooooooo #18

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

    soga ,我一直考虑的是 web 端,如果是客户端的话,我赞同
    arch9999
        36
    arch9999  
       2022-08-04 13:05:56 +08:00
    @Morii

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

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

    @GeorgeGalway #25
    既然是美丽的小姐姐是前端,不更应该让前端处理么,遇到问题了可以上去交流啊。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3440 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 10:52 PVG 18:52 LAX 03:52 JFK 06:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86