【问题标题】:Math expression works in Google but not sqlite or KornShell.数学表达式在 Google 中有效,但在 sqlite 或 KornShell 中无效。
【发布时间】:2013-12-28 20:35:19
【问题描述】:

我发现,将 KornShell (ksh) 或 Sqlite 中的数学表达式与 Google 或 Excel 进行比较时,它们的结果并不相同。

首先将下面的表达式放到谷歌中: 8 / (8 + 3) * 9 = 6.54545454545

现在请注意 KornShell 中的以下内容:

> ksh
> echo $(( 2 + 3 ))
5
>  echo $((8  / (8 + 3) * 9))
0
# Now change the first 8 to a 12 (higher than 11) and it works.... 
>  echo $((12  / (8 + 3) * 9)) 
9

现在在 sqlite 中同样注意:

sqlite> select 8/(8 + 3) * 9;
8/(8 + 3) * 9
0

sqlite> select 12/(8 + 3) * 9;
12/(8 + 3) * 9
9

如何使这个表达式在 KornShell 和 sqlite 中都有效?

【问题讨论】:

    标签: sqlite shell math ksh arithmetic-expressions


    【解决方案1】:

    sqlite 具有数据类型的概念。所有这些常量 - 12、8、3 - 都是整数常量。使用整数进行计算时,它不会将它们提升为浮点数。 Korn shell 可能也是如此。许多主流编程语言也是如此,尤其是 C 及其众多衍生语言。

    如果您想应用浮点规则,请将您的数字设为浮点:

    select 12.0/(8.0 + 3.0) * 9.0
    

    【讨论】:

    • 是的,确认这对于 ksh 是正确的(在看到您的答案之前)。祝大家好运。
    • 这就是存在像 BC 和 DC 这样的应用程序的原因。如果您想要更高的精度(保持在 shell 级别),请更改操作的顺序(保持数学等价)以进行最大的除数并尝试使除数最小。
    • 所以要解决这个问题,看起来我需要转换为浮点数或乘以 1.0。见:stackoverflow.com/questions/8305613/…
    • 嗯,添加“0.0”似乎也可以修复我的表达式:8/(8 + 3 + 0.0) * 9 = 6.54 BUT 8/(8 + 3) * 9 = 0
    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多