【问题标题】:Erlang - Math and Code Elegance QuestionErlang - 数学和代码优雅问题
【发布时间】:2011-02-10 07:32:58
【问题描述】:

这是一个非常小的数学问题,更多的是关于最有效、最优雅的方式的问题。

如果我给出一个整数,例如

1.50

or

1.22

or

10.99

如何去掉小数点左边的数字,把右边的数字输出为整数或浮点数,例如

.50  or 50

.22 or 22

.99 or 99

最快的方法是什么很重要。如果可能的话,我宁愿不把它变成一个字符串。

感谢您的帮助。

BR

【问题讨论】:

  • 为什么 1.50 变成 50 而不仅仅是 5 ?你想要1.507 给什么?

标签: parsing math erlang integer floating-point


【解决方案1】:

首先,1.50 不是整数,而是浮点数。如果有小数,则不是整数。也就是说,你可以像这样得到小数点后的两位数:

Precision = 100.
Value = 1.50.
Decimal = trunc(Value * Precision) rem Precision.

如果您需要更多位数,请更改精度变量。

【讨论】:

    【解决方案2】:

    一种方式是通过trunc(Number):

    1> X = 10.23 .
    10.23
    2> Y = X - trunc(X) .
    0.23000000000000043
    
    % To get an integer out of the float, you can use `trunc` twice, but you'll have
    % to adjust your number first ...
    
    3> Precision = 100 . 
    100
    4> Z = trunc(Y * Precision) .
    23
    
    % In one statement:
    
    5> Z = trunc((X - trunc(X)) * Precision) .
    

    【讨论】:

    • 我认为 OP 想要 23,而不是 0.235,而不是 0.5,因此这没有用。
    • 但 OP 声明:“...并将右侧输出为整数 浮点数”
    • 可能我被.50 or 50弄糊涂了,把它解释为.50 => 50。对不起。
    • 不应该是:Z = trunc((X - trunc(X)) * Precision)。 ?原因是因为 OP 似乎不想四舍五入最后一个数字。考虑round((1.99 - trunc(1.99)) * 10)。这给出了 10 和 OP .99 => 99 给出的示例
    猜你喜欢
    • 2013-04-19
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多