请参阅 https://issues.scala-lang.org/browse/SI-5205 和 https://github.com/scala/scala-dist/pull/20
从scala中弃用了八进制转义值前导0,我没有看到惯用的替代方法.
你现在如何处理scala 2.10中的octals?
编辑 - unix权限是八进制
我一直想知道为什么前导零(0)用于表示八进制数,而不是 - 例如 - 0o.使用0o会同样有用,但不会导致与导致0es 一样多的问题(例如parseInt('08');在JavaScript中).这个设计选择背后的原因是什么?
为什么在JavaScript严格模式下不允许使用八进制数字文字?有什么危害?
"use strict";
var x = 010; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.Run Code Online (Sandbox Code Playgroud)
<h1>Check browser console for errors</h1>Run Code Online (Sandbox Code Playgroud)
我的bash脚本中有以下逻辑:
#!/bin/bash
local_time=$(date +%H%M)
if (( ( local_time > 1430 && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
# do something
fi
Run Code Online (Sandbox Code Playgroud)
我偶尔会得到标题中指定的错误(上面的任何时间都会08xx触发错误).
对于如何解决这个问题,有任何的建议吗?
我在Ubuntu 10.04 LTS上运行
[编辑]
我按照SiegeX的建议修改了脚本,现在,我收到了错误:[: 10#0910: integer expression expected.
有帮助吗?
据我所知,[[并且[可以预期其行为大致相同,考虑到一些额外的功能[[.但最近我注意到bash如何处理八进制扩展的差异:
$ b=010; echo $((b))
8
$ [[ $b -eq 8 ]]; echo $?
0
Run Code Online (Sandbox Code Playgroud)
但
$ [ $b -eq 8 ]; echo $?
1
$ test $b -eq 8; echo $?
1
$ [ $b -eq 10 ]; echo $?
0
Run Code Online (Sandbox Code Playgroud)
为什么后一个表达式会降低自动八进制转换?-eq根据help testBash和Bash参考手册中的"算术" 表达式,并且根据参考手册的下一部分,具有前导零的常量可以被视为八进制.
POSIX sh 在这个问题上有点不太清楚:尽管POSIX算术表达式仍然将前导零整数扩展到它们的八进制值,但它将-eq表达式test称为代数而不是算术.
是否有任何文件或证据表明bash 故意区分[[和[进行八进制扩展,或者它只是一个偶然的特征?
我注意到PHP和JavaScript处理八进制和十六进制数字时遇到一些困难,同时键入juggling和cast:
PHP:
echo 16 == '0x10' ? 'true' : 'false'; //true, as expected
echo 8 == '010' ? 'true' : 'false'; //false, o_O
echo (int)'0x10'; //0, o_O
echo intval('0x10'); //0, o_O
echo (int)'010'; //10, o_O
echo intval('010'); //10, o_O
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
console.log(16 == '0x10' ? 'true' : 'false'); //true, as expected
console.log(8 == '010' ? 'true' : 'false'); //false, o_O
console.log(parseInt('0x10')); //16, as expected
console.log(parseInt('010')); //8, as expected
console.log(Number('0x10')); //16, as expected
console.log(Number('010')); //10, o_O
Run Code Online (Sandbox Code Playgroud)
我知道,PHP有octdec()和hexdec()功能补救八进制/十六进制的不当行为,但是我希望在intval() …
我正在尝试编写一个小的Python 2.x API来支持获取一个
jobby jobNumber,其中jobNumber提供了一个整数.有时用户提供一个jobNumber以0开头的整数文字,例如037537.(这是因为它们已被R语言所淹没,这是一种明智地考虑的语言037537==37537.)然而,Python认为以"0"开头的整数文字是OCTAL 037537!=37537,而是037537==16223.这让我觉得这是对最小惊喜原则的公然侮辱,幸好看起来这在Python 3中得到了修复---参见PEP 3127.
但我现在仍然坚持使用Python 2.7.所以我的用户这样做:
>>> fetchJob(037537)
Run Code Online (Sandbox Code Playgroud)
并默默地得到错误的工作(16223),或者:
>>> fetchJob(038537)
File "<stdin>", line 1
fetchJob(038537)
^
SyntaxError: invalid token
Run Code Online (Sandbox Code Playgroud)
Python拒绝八进制不兼容的数字.
似乎没有提供任何东西__future__以允许我获得Py3K行为---它必须以某种方式内置到Python,因为它至少需要更改词法分析器.
是否有人知道如何保护我的用户在这种情况下做错工作?目前,我能想到的最好的方法是更改该API,以便它采用字符串而不是int.
Java提供了以2、8、10和16为基数编写数字文字的方法。
我想知道为什么包括基数8,例如int x = 0123;?
我认为可能存在类似于十六进制的一个字节的容量为FF + 1等等的事实。
我正在做非常简单的int划分,我得到奇怪的结果.
此代码2按预期打印:
public static void main(String[] args) {
int i = 200;
int hundNum = i / 100;
System.out.println(hundNum);
}
Run Code Online (Sandbox Code Playgroud)
此代码打印1为不期望:
public static void main(String[] args) {
int i = 0200;
int hundNum = i / 100;
System.out.println(hundNum);
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
(Windows XP Pro,在Eclipse 3.4.1中运行的Java 1.6)
我正在尝试编写以下代码.但它给了我错误,请帮助我.
int six=06;
int seven=07;
int abc=018;
int nine=011;
System.out.println("Octal 011 ="+nine);
System.out.println("octal O18 =" + abc);
Run Code Online (Sandbox Code Playgroud)
为什么我不能给018和019变量.我可以给变量赋值020和021.为什么会这样?这背后的原因是什么,请告诉我.
我得到了以下错误
integer number too large: 018
int eight=018;
Run Code Online (Sandbox Code Playgroud) octal ×10
java ×3
bash ×2
javascript ×2
casting ×1
division ×1
ecmascript-5 ×1
hex ×1
history ×1
idiomatic ×1
int ×1
literals ×1
pep ×1
php ×1
python ×1
scala ×1
scala-2.10 ×1
sh ×1
strict-mode ×1
ubuntu ×1