首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将朱莉娅中的数字转换成布尔值?

如何将朱莉娅中的数字转换成布尔值?
EN

Stack Overflow用户
提问于 2022-05-27 13:47:46
回答 1查看 521关注 0票数 8

我想把数字转换成等价的布尔值。基于官方医生

"false在数字上等于0,true在数字上等于1。“

所以我想把数值转换成等价的布尔值。期望行为的示例

代码语言:javascript
运行
复制
[1] Bool(5)
> true

但是,朱莉娅告诉我:

代码语言:javascript
运行
复制
ERROR: InexactError: Bool(5)
Stacktrace:
 [1] Bool(x::Int64)
   @ Base .\float.jl:158
 [2] top-level scope
   @ REPL[26]:1

但如果我说:

代码语言:javascript
运行
复制
[1] Bool(0.0)

# result
> false

它在00.0上看起来不错!但它不适用于52.1等数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 14:16:01

快速的答案似乎是,您想要测试一个值是否为非零,并且您可以测试一个数字x是否为非零,比如:x != 0。然而,一个数字被认为是真还是假,取决于你使用的是哪种语言;下面将更详细地介绍。

得到了快速的答案之后,我们可以谈谈为什么。文档说,falsetrue在数字上等于0和1。我们可以自己检验一下:

代码语言:javascript
运行
复制
julia> false == 0
true

julia> true == 1.0
true

你可以看到,无论数值类型,整数或浮动,甚至更深奥的数字类型,如复数或理性主义,等式都是有效的。我们还可以将布尔人转换为其他类型的数字:

代码语言:javascript
运行
复制
julia> Int(false)
0

julia> Float64(true)
1.0

我们可以将这些值转换为布尔值:

代码语言:javascript
运行
复制
julia> Bool(0)
false

julia> Bool(1.0)
true

您不能做的是将不等于0或1的数字转换为布尔值:

代码语言:javascript
运行
复制
julia> Bool(5)
ERROR: InexactError: Bool(5)

这是因为Bool类型只能精确地表示0和1的值,并且试图将任何其他数值转换为Bool将给出一个InexactError。如果尝试将非整数值的浮点数转换为整数类型,则会出现相同的错误:

代码语言:javascript
运行
复制
julia> Int(5.0)
5

julia> Int(5.5)
ERROR: InexactError: Int64(5.5)

或不足以表示该值的较小类型的整数:

代码语言:javascript
运行
复制
julia> Int8(123)
123

julia> Int8(1234)
ERROR: InexactError: trunc(Int8, 1234)

这里也发生了同样的事情:Bool不够大,不能表示值5,所以如果您试图将值5转换为Bool,就会得到一个错误。

许多语言用来证明数字真实性的惯例是,代表零的值是错误的,表示无零的值是真实的。请注意,这样做没有合理的数学理由:零不是假的,非零的数字不是真的;它只是C编程语言的一个约定,它没有布尔类型,使用这个约定在条件词中将整数作为真/假处理。然而,这种约定并不是通用的,因为有一些流行的语言不遵循它:例如,在Lisps和Ruby中,所有的数字都是真实的。我最近在朱莉娅话语论坛上写了一篇关于不同语言中关于真实性的不同概念的帖子文章,为什么朱莉娅拒绝真实,而是要求你写出一个明确的条件,比如数字的比较和数字的零,或者集合的非空性。

由于实际要检查的条件是一个数字是否等于零,所以应该这样做:通过执行x != 0显式地将数字与零进行比较。这将计算为一个布尔值:如果true为非零,则为false,如果x为零。还有一个谓词函数也可以做到这一点:iszero(x)检查x是否为零,如果您想要计算集合中有多少个零值或非零值,这是很方便的:

代码语言:javascript
运行
复制
julia> v = rand(-2:2, 100);

julia> count(iszero, v)
18

julia> count(!iszero, v)
82
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72406426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档