V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
secsilm
V2EX  ›  程序员

20+10%=?

  •  
  •   secsilm ·
    secsilm · 2019-09-02 15:13:14 +08:00 · 17439 次点击
    这是一个创建于 1888 天前的主题,其中的信息可能已经有所发展或是发生改变。

    22 ?这怎么算的?

    192 条回复    2019-09-04 17:50:51 +08:00
    1  2  
    Vegetable
        1
    Vegetable  
       2019-09-02 15:16:17 +08:00
    miui 的计算器是也,输入 20+10%会自动转换成 20+2
    Vegetable
        2
    Vegetable  
       2019-09-02 15:17:04 +08:00
    科学计算器会转换成 20+0.1
    251243021
        3
    251243021  
       2019-09-02 15:17:19 +08:00
    加上()来保证计算优先级
    xenme
        4
    xenme  
       2019-09-02 15:18:54 +08:00
    看起来很合理而且智能。
    SEARCHINGFREE
        5
    SEARCHINGFREE  
       2019-09-02 15:19:11 +08:00
    20+20*10%
    lhj2100
        6
    lhj2100  
       2019-09-02 15:20:29 +08:00 via iPhone
    随手找了个太阳能语音电子计算器算了下 22
    DANG
        7
    DANG  
       2019-09-02 15:22:41 +08:00
    LokiSharp
        8
    LokiSharp  
       2019-09-02 15:25:45 +08:00
    没问题啊,加的是前一项的 10%
    secsilm
        9
    secsilm  
    OP
       2019-09-02 15:26:04 +08:00
    @xenme
    @SEARCHINGFREE
    确实是好智能,目前看来是把最后一个 % 以前的数求和当成基数来算,貌似是 a + b + c% = (a + b) + (a + b) * c%
    ,无论 a 和 b 有没有 %。


    @251243021 想得到正确结果只能 20 + (10%) 了。。。
    bk201
        10
    bk201  
       2019-09-02 15:29:13 +08:00
    没明白为什么说只能,这个不是多此一举吗
    20015jjw
        11
    20015jjw  
       2019-09-02 15:31:33 +08:00
    美国小学生就是这么算的...
    across
        12
    across  
       2019-09-02 15:33:01 +08:00   ❤️ 84
    emm,前面加个 HP 20 +10%
    是不是一下子就看懂了。
    no1xsyzy
        13
    no1xsyzy  
       2019-09-02 15:36:42 +08:00
    @bk201 面向大众 vs 面向 “理科生”…… 大概是这样
    不如说 “理科生” 哪会去写 10% 来表示 0.1,还得暂时转移操作层,无论是 Shift 还是特殊键盘。连这个符号当百分比都不如取模常用
    sagk
        14
    sagk  
       2019-09-02 15:47:52 +08:00   ❤️ 1
    twenty and ten percent ?
    x86
        15
    x86  
       2019-09-02 15:52:51 +08:00 via iPhone   ❤️ 1
    @across 简单粗暴的解释完美
    sks4728
        16
    sks4728  
       2019-09-02 16:44:31 +08:00   ❤️ 1
    @across 优秀
    just1
        17
    just1  
       2019-09-02 16:47:15 +08:00
    @across #12 emm,我看不懂?
    a55455
        18
    a55455  
       2019-09-02 16:55:31 +08:00
    魅族 普通模式和科学模式都是 20.1
    kumastudio
        19
    kumastudio  
       2019-09-02 16:55:51 +08:00   ❤️ 1
    @across 牛批
    Lin0936
        20
    Lin0936  
       2019-09-02 16:57:55 +08:00   ❤️ 1
    @across #12 一开口就知道是老手
    syuraking
        21
    syuraking  
       2019-09-02 16:58:26 +08:00   ❤️ 1
    只要是使用谷歌底层计算器的都是 22,

    如果是其它的(魅族、锤子,老 OV 机,老华为机),就是 20.1,
    安卓机可以明显的简单测试出对安卓底核修改的程度

    明显这个运算顺序问题。
    winterbells
        22
    winterbells  
       2019-09-02 17:00:05 +08:00 via Android
    单位不同怎么加。
    silencefent
        23
    silencefent  
       2019-09-02 17:03:08 +08:00
    安卓机只能写成 20+1%10
    pastgift
        24
    pastgift  
       2019-09-02 17:04:01 +08:00 via iPhone   ❤️ 1
    严格来说,单位不同并不能直接加。
    自动转换成 20 + (20 * 10%) 挺合理
    swulling
        25
    swulling  
       2019-09-02 17:08:21 +08:00 via iPhone
    @syuraking 计算器只是一个 app,不涉及所谓的 底核修改,只证明有没有重做这个 APP
    RickyC
        26
    RickyC  
       2019-09-02 17:10:51 +08:00
    20.1
    yazinnnn
        27
    yazinnnn  
       2019-09-02 17:14:53 +08:00
    只能说这个算法很美式
    laviris
        28
    laviris  
       2019-09-02 17:16:26 +08:00
    今天传这个新闻的太矫情了,一般做计算的时候,很少有人会用 10%吧?为什么不直接写为 0.1,这么的好处是,我想计算某个比分比的增减就特别方便。
    Biwood
        29
    Biwood  
       2019-09-02 17:18:49 +08:00   ❤️ 1
    @just1 想象一下你的血条只剩下 20 点了,喝了一瓶加血药水,旁边飘起一个 +20%,然后你的血条升到了 22 点
    Biwood
        30
    Biwood  
       2019-09-02 17:21:02 +08:00
    @just1 手误,是飘起一个+10%
    Vegetable
        31
    Vegetable  
       2019-09-02 17:23:29 +08:00   ❤️ 2
    @Biwood 这药按当前血量百分比回复,也太奇葩了吧
    belin520
        32
    belin520  
       2019-09-02 17:27:50 +08:00   ❤️ 1
    @across #12 牛逼,攻击力 220 +10%
    passerbytiny
        33
    passerbytiny  
       2019-09-02 17:32:03 +08:00
    看你们说得这么邪乎,我打开 windows 计算器想验证一下,然而根本无法输入百分之十,然后才想起来传统计算器上是不能输入百分数的。传统计算器,以及 C 系列的语言,“%”是的含义的 Mod,也即取余数。windows 计算器依次输入 2 0 + 1 0 % =,结果是 “ 20 + 10 Mod 10 = 20 ”。
    Syaoran
        34
    Syaoran  
       2019-09-02 17:32:11 +08:00 via Android
    其实还有个例子就是打折往往是写-70%
    所以常见语意我觉得 a±x%意思是 a*(1±x%)
    当然在计算器中是否按语意计算就有待商榷
    YQ94
        35
    YQ94  
       2019-09-02 18:07:34 +08:00
    这个算的是实际意义 而不是直接把 10%当一个数值 平时生活中也都是说某某值的百分之十 这里就是按照生活中的来算的
    xd314697475
        36
    xd314697475  
       2019-09-02 18:49:30 +08:00
    @passerbytiny windows 的计算器左上角改模式为标准,就有%了,结果 22
    mxalbert1996
        37
    mxalbert1996  
       2019-09-02 19:24:11 +08:00
    这个设计主要方便是在计算含税价格或者折后价格这类的场景里使用的,你想想对于普通用户来说需要用到加减百分数的时候基本上都是这类场景。
    guokeke
        38
    guokeke  
       2019-09-02 19:26:05 +08:00
    20+上 20 的 10% = 22
    geelaw
        39
    geelaw  
       2019-09-02 19:46:45 +08:00 via iPhone
    https://devblogs.microsoft.com/oldnewthing/20080110-00/?p=23853

    通常的用法是 A +/- B % = A(1 +/- B/100)

    一个可能的实现是:输入数字后按 %,等价于弹出 a、b,并压入 b、ab/100。
    loading
        40
    loading  
       2019-09-02 20:21:53 +08:00 via Android
    这个设计很傻
    loading
        41
    loading  
       2019-09-02 20:22:24 +08:00 via Android
    等下我用卡西欧算一下
    hsiang271828
        42
    hsiang271828  
       2019-09-02 20:42:08 +08:00
    @across 优秀
    shansing
        43
    shansing  
       2019-09-02 20:45:02 +08:00   ❤️ 1
    我记得小学数学好像比较过分数、除法式、百分数。百分数是不能代表其等大数值的。
    shansing
        44
    shansing  
       2019-09-02 20:46:45 +08:00
    没说好。百分数不能单独作一个数用,它只能用来描述某个基准值的比率。
    LiYanHong
        45
    LiYanHong  
       2019-09-02 20:55:25 +08:00
    第一反应是表达式错误
    douglas1997
        46
    douglas1997  
       2019-09-02 21:18:32 +08:00
    这是啥手机
    zhuangzhuang1988
        47
    zhuangzhuang1988  
       2019-09-02 21:44:03 +08:00   ❤️ 4
    反正微软的计算器也开源了,具体代码在这里 https://github.com/microsoft/calculator/blob/master/src/CalcManager/CEngine/scifunc.cpp#L83
    原因看 @geelaw 的回答
    Xavier001
        48
    Xavier001  
       2019-09-02 22:00:19 +08:00
    @zhuangzhuang1988
    @geelaw 这个名字读出来才感觉哪里不对。。。
    iceEar
        49
    iceEar  
       2019-09-02 22:07:53 +08:00 via iPhone
    20 plus 10% tip, 给小费时候这样计算就很快。同理,打折时候 10% off,直接就 20-10%,没毛病啊……
    Greatshu
        50
    Greatshu  
       2019-09-02 23:21:06 +08:00
    dinmshi001
        51
    dinmshi001  
       2019-09-02 23:35:04 +08:00
    @syuraking 计算机就是一个 app,计算顺序是 app 自己写的,你也可以写自己的计算策略,跟内核没关系。
    dinmshi001
        52
    dinmshi001  
       2019-09-02 23:37:15 +08:00
    @syuraking 还有底核是什么鬼
    b00tyhunt3r
        53
    b00tyhunt3r  
       2019-09-03 00:28:03 +08:00 via iPad
    @across
    可以。生活都被你看透了。
    cskeleton
        54
    cskeleton  
       2019-09-03 02:27:38 +08:00
    @lhj2100 #6 感觉这是老式计算器的一种约定俗成的缩写,一直沿用了。而且本来计算器的输入并不等价于一个数学表达式。

    有没有谁还保留了计算器的说明书的,可以翻翻,这种简写的计算方式应该会在说明书上讲的。我记得之前买过一个 TI 的计算器,说明书还挺厚的。后来有同事借取考试,就没还了……
    realpg
        55
    realpg  
       2019-09-03 06:26:37 +08:00   ❤️ 1
    @Biwood #29
    满血 10000 点,剩下 20 点血,喝了个加 10%的药只增加到 22 的话,那这游戏没法玩了
    realpg
        56
    realpg  
       2019-09-03 06:31:36 +08:00
    @cskeleton #54

    百分数代表比例,是不能作为数值使用的


    而这种结果,并不是什么计算器约定俗成

    20+0.1%=20.1 是完完全全的错误答案

    20+0.1%=22 并不能说是正确答案 是大部分计算器对于这种错误的表达式的真实意义一种合理推测的后计算结果
    ericgui
        57
    ericgui  
       2019-09-03 06:44:06 +08:00
    https://github.com/microsoft/calculator/issues/655


    随手给微软计算器提了一个 issue
    441324376
        58
    441324376  
       2019-09-03 06:49:08 +08:00
    我也觉得没问题
    frittle
        59
    frittle  
       2019-09-03 07:01:50 +08:00
    觉得没问题。什么的 10%?既然+前面提供了 20,当然是 20 的 10%了。为什么能算成 10 的 10%( 0.1 )?
    jakezh
        60
    jakezh  
       2019-09-03 07:45:17 +08:00
    @frittle 老弟 你的数学需要回幼儿园回炉一下
    loading
        61
    loading  
       2019-09-03 07:48:21 +08:00 via Android
    卡西欧 fx-991CN X 中文版
    20+20%
    =
    20.2
    loading
        62
    loading  
       2019-09-03 07:50:01 +08:00 via Android
    哦,搞错了,重新输入一次。
    20+10%
    =
    20.1
    SkyLanD
        63
    SkyLanD  
       2019-09-03 08:06:30 +08:00 via Android
    翻译成中文吧

    你有 20 块钱,多了 10%,现在有多少钱
    frittle
        64
    frittle  
       2019-09-03 08:24:51 +08:00
    @jakezh 发送前没检查,就变成这样了 😭
    Ingran
        65
    Ingran  
       2019-09-03 08:33:13 +08:00
    这是 20 的 1%,要想得出 20.1,就 20+1*1% = 20.1,%是谁的得算清楚
    wujl100
        66
    wujl100  
       2019-09-03 08:53:52 +08:00
    设计解释:如 100+10%,大多数使用计算器的场景是比 100 多 10%的结果是多少,而不是 100 与 0.01 的和。如果处理为 100+0.01 则无法体现%运算的优势。生活中使用计算器按出 a+x%,通常用于计算同比或环比增长数据、折扣信息,用 a+x%快速按出 a*(1+x)%计算结果。
    no1xsyzy
        67
    no1xsyzy  
       2019-09-03 09:00:17 +08:00   ❤️ 1
    wolfram alpha
    no1xsyzy
        68
    no1xsyzy  
       2019-09-03 09:02:53 +08:00   ❤️ 1
    @ericgui 你这 issue 就一个标题?
    issue 模板写在那儿白瞎了,而且你没发现 issue 模板里有两句相反的话,并且期望你删去其中一句吗?
    sunziren
        69
    sunziren  
       2019-09-03 09:08:38 +08:00
    @no1xsyzy 哈哈哈哈哈嗝
    dikcen
        70
    dikcen  
       2019-09-03 09:12:02 +08:00 via Android   ❤️ 1
    10%不能简单的当成 0.1 考虑,%相当于是量纲。数学表达上会写 0.5x100%=50%,但不会写 0.5=50%,量纲不统一不能相等。同理,20+10%,
    dikcen
        71
    dikcen  
       2019-09-03 09:14:26 +08:00 via Android
    点错,继续。20+10%从量纲考虑并不能相加,但按照世俗而非科学的方式计算,比如商品提价的计算,结果是 22 也可以接受
    atan
        72
    atan  
       2019-09-03 09:17:53 +08:00   ❤️ 1
    按这个逻辑,以后大街上打折的,但凡写了-50%的,都是降价 5 毛啊,你肯吗?
    resu
        73
    resu  
       2019-09-03 09:21:41 +08:00
    Win10 计算器可以试试,在按到%的瞬间,10 变成了 2,也就是之前数字 20 的 10%。
    MerlinPrismriver
        74
    MerlinPrismriver  
       2019-09-03 09:24:48 +08:00
    这问题有点跟 ++(a++) = ++(++(a++)++) 求 a=? 像,,主要目的是恶心人[狗头]
    konakona
        75
    konakona  
       2019-09-03 09:40:24 +08:00
    这里的计算结果是没有问题的啊……
    20+10%的结果为:20*1.1 = 22

    这里的计算结果要的就是 22,而不是 20*0.1 这个中间差。
    DiamondbacK
        76
    DiamondbacK  
       2019-09-03 09:40:40 +08:00
    说「单位」和「量纲」的,把物理老师也搭进来了。
    知道什么是「单位」,什么是「量纲」吗?
    这里的有「单位」吗?有「量纲」吗?
    有的话,是什么?
    juded
        77
    juded  
       2019-09-03 09:49:30 +08:00   ❤️ 1
    @loading 我的卡西欧得到 300 =。=
    cruii
        78
    cruii  
       2019-09-03 09:50:54 +08:00
    换个实际应用场景,一家公司财务,月流水上亿亿,此时要算 6545164564654987 增长了 20%的结果,如果不优化这个步骤,你得 6545164564654987 + 6545164564654987 * 20%这样来表达计算,那可能计算器按得有点难受, 或者想到了 6545164564654987 * 120%这种简单的方式,但这种方式在语义上并不能表示增加了 20%,只是和增加了 20%是相同的数学结果。
    DiamondbacK
        79
    DiamondbacK  
       2019-09-03 09:54:55 +08:00
    @realpg #56
    > 百分数代表比例,是不能作为数值使用的
    > 而这种结果,并不是什么计算器约定俗成
    ------
    「百分数不能作为数值使用」的依据?

    > 20+0.1%=20.1 是完完全全的错误答案
    > 20+0.1%=22 并不能说是正确答案 是大部分计算器对于这种错误的表达式的真实意义一种合理推测的后计算结果
    ------
    这里也没讨论这个算式( 20+0.1%)。
    「合理推测」是什么意思?「大部分计算器」都这样「推测」吗?
    大部分计算器都这样做,但又「并不是什么计算器约定俗成」,对吗?
    MarginK
        80
    MarginK  
       2019-09-03 09:55:41 +08:00
    20.1

    小学数学都学过吧,没有乘数,默认为 1
    10%就等于 0.1
    DiamondbacK
        81
    DiamondbacK  
       2019-09-03 10:01:26 +08:00
    @winterbells #22, @pastgift #24 @dikcen #70
    续 #76:

    单位系指给定的某一基础物理量,单位的给定皆属人为。常伴随着某种表示法,例如米、秒、千克等,以方便人们在沟通某一量时有共通的概念。
    量纲,又叫作因次( Fundamental unit ),是表示一个物理量由基本量组成的情况。
    百分比(英语:Percentage ),又称百分率、百分数(符号为百分号 %)是一种表达比例,比率或分数数值的方法(以百为分母的分数计算),也是无因次量的数字(纯数)。

    1、10.77 、25%, 都是数、纯数,不是物理量。没有单位,没有量纲。
    caocong
        82
    caocong  
       2019-09-03 10:01:28 +08:00
    国外打折就喜欢写 -20% -50%(如某 G 胖平台
    如你买的游戏 158 有-70% 直接按计算器 158-70%就能得到折后价
    算是一种非数学常识但便利的“语法糖”?
    DiamondbacK
        83
    DiamondbacK  
       2019-09-03 10:01:57 +08:00
    @MarginK 对。
    zhouweiluan
        84
    zhouweiluan  
       2019-09-03 10:02:25 +08:00
    其实我觉得从语句的理解上是合理的。
    今天你收入了 100 块,我再额外给多你 20%的提成。
    那 100 再+20%就是 120 而不是 100+20%=100.2。
    要不然得复杂成了 100+(100*20%),所以老板要说:你今天收入了 100 块,我再额外给多你 100 块的 20%的提成?
    Vegetable
        85
    Vegetable  
       2019-09-03 10:04:31 +08:00
    还有人在讨论这个问题,数学不考虑,这就是一个很人性的功能,
    现在有一个商品,原价 388 元,当前 20%OFF,请问当前价格是多少元?
    388-20%=310.4(KDE 计算器也是这么设计的)
    用反对者的算法需要 388*(1-20%)才能算出来,众所周知,括号很难按的,并且有些计算器根本没括号,就需要 1-20%*388 这么算,对用户来说太不友好了.
    所以,小白用户会自己去按 1-20%,自认为数学好的用户会用后一种方法算,完美
    petelin
        86
    petelin  
       2019-09-03 10:06:46 +08:00 via iPhone
    用苹果计算器算一下就知道了 因为苹果不展示公式 都是单独计算的
    输入最后一个%得到的 2 然后输入= 就是 20+2 22 了
    FrankHB
        87
    FrankHB  
       2019-09-03 10:16:30 +08:00
    %的量纲就是 1,有什么好脑补的。
    无非是加了坨无聊的语法糖而已。20+10%=>20(1+10%)。
    数学?人性?反正吃中缀屎的接着真香吧。
    openbsd
        88
    openbsd  
       2019-09-03 10:23:01 +08:00
    楼上的各位大神 把 20 换成 0 应该就会少些争议了......
    FrankHB
        89
    FrankHB  
       2019-09-03 10:23:08 +08:00
    Yvette
        90
    Yvette  
       2019-09-03 10:27:47 +08:00
    其他地方不清楚,至少北美本科阶段的工科基础(数学力学材料学经济学等等等等)教材里面遇到 10% 这种数字的时候,没有任何一个地方是等效成数字 0.1 来处理的。楼上提 issue 的那位我看人也是在 San Diego 的,连这个都没搞清楚也真是有点奇怪
    savebox
        91
    savebox  
       2019-09-03 10:50:03 +08:00
    用计算器 10%+20 就是 20.1
    savebox
        92
    savebox  
       2019-09-03 10:54:27 +08:00
    所以以前用计算器的时候 有一本厚厚的说明书,里面有写输入规则,APP 当然也是按规则写的.
    单独拿出来讨论计算器 20+10% 是 20.1 还是 22 没有意义,都是作者的自定义规则而已
    dikcen
        93
    dikcen  
       2019-09-03 11:09:41 +08:00
    @DiamondbacK 请必要牵扯其它。我承认物理很渣,只是说“相当于”量纲。我表达的是,“ 20 ”和“ 10%”没有比较,更没有相加的基础,因为它们所代表的“量纲”/“单位”/意义不同。如之前所说,“ 0.5 ”不等于“ 50%”,就我的小学记忆,当求百分比的时候是需要做一个运算“ x 100%”,如“ 0.5 x 100% = 50%”。这些同 @Yvette #90 观点一致。
    @realpg #56 同意观点。
    dikcen
        94
    dikcen  
       2019-09-03 11:12:02 +08:00
    @realpg # 56 但是写错了
    0.1% ==> 10%
    lvybupt
        95
    lvybupt  
       2019-09-03 11:21:59 +08:00
    这个是计算器的 feature,不是 bug。 需要加个 0.2 的运算需要计算器么?? 但是加 20%能省去很多麻烦。

    这个简易计算器本来就是给出纳财会准备的,不是给程序员设计的。 工程类的用的科学计算器带(),也没有这个 feature。
    lsmlive
        96
    lsmlive  
       2019-09-03 11:22:52 +08:00
    @across 果然一下就懂了,昨天看到这个新闻,看了好几次都不明白怎么算的😂
    vincel
        97
    vincel  
       2019-09-03 11:23:58 +08:00
    国外和国内使用习惯不同
    Shan0
        98
    Shan0  
       2019-09-03 11:27:29 +08:00
    感觉现实意义就是给一个简便运算,比如买了 20 元东西,应收 10%的税,正常应该是 20 + 20 * 10%, 计算器直接打 20 + 10%,意思是 20 刀+10%税 = 22 刀
    secsilm
        99
    secsilm  
    OP
       2019-09-03 11:29:06 +08:00
    @douglas1997 pixel 3 xl
    wangyifei6817
        100
    wangyifei6817  
       2019-09-03 11:30:09 +08:00
    我第一反应就是 22..难道不应该?
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2464 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 10:39 · PVG 18:39 · LAX 03:39 · JFK 06:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.