这是大数问题还是TclTk的格式问题?
Is this a large number problem or a format problem of TclTk?
我在 Windows 8.1.
上使用 ActiveTcl 8.6.8
TclTk 是否有像 Python 和 Ruby 这样的大 "unlimited" 数字?如果是,那么下面第二个代码部分有什么问题?
下面的代码没有问题,我看懂了
% set a 1234567890
1234567890
% puts $a
1234567890
% expr $a +10
1234567900
% format %d $a
1234567890
% format %5d $a
1234567890
% format %15d $a
1234567890
下面的代码有什么问题?
% set b 9876543210
9876543210
% puts $b
9876543210
% expr $b + 10
9876543220
% format %d $b
1286608618
% format %5d $b
1286608618
% format %15d $b
1286608618
为什么格式不能提供正确的输出?我做错了什么?
Tcl 有 bignums。从8.5开始就做了。它在其算术代码中需要的任何地方使用它们;你应该假装所有整数都是大数字(让 Tcl 选择它想要的内部使用的任何存储格式)。
format
和 scan
命令需要一些额外的工作,因为要支持它们,因为它们还必须支持依赖于以前常见的钳位到范围行为的旧代码.这意味着使用 ll
作为格式代码的修饰符;例如,%d
:
% format %d 123123123123123123123123
-8893568888133913677
% format %lld 123123123123123123123123
123123123123123123123123
% scan 123123123123123123123123 %d
9223372036854775807
% scan 123123123123123123123123 %lld
123123123123123123123123
这与字段宽度控制无关。
% format %40d 123123123123123123123123
-8893568888133913677
% format %40lld 123123123123123123123123
123123123123123123123123
我在 Windows 8.1.
上使用 ActiveTcl 8.6.8TclTk 是否有像 Python 和 Ruby 这样的大 "unlimited" 数字?如果是,那么下面第二个代码部分有什么问题?
下面的代码没有问题,我看懂了
% set a 1234567890
1234567890
% puts $a
1234567890
% expr $a +10
1234567900
% format %d $a
1234567890
% format %5d $a
1234567890
% format %15d $a
1234567890
下面的代码有什么问题?
% set b 9876543210
9876543210
% puts $b
9876543210
% expr $b + 10
9876543220
% format %d $b
1286608618
% format %5d $b
1286608618
% format %15d $b
1286608618
为什么格式不能提供正确的输出?我做错了什么?
Tcl 有 bignums。从8.5开始就做了。它在其算术代码中需要的任何地方使用它们;你应该假装所有整数都是大数字(让 Tcl 选择它想要的内部使用的任何存储格式)。
format
和 scan
命令需要一些额外的工作,因为要支持它们,因为它们还必须支持依赖于以前常见的钳位到范围行为的旧代码.这意味着使用 ll
作为格式代码的修饰符;例如,%d
:
% format %d 123123123123123123123123
-8893568888133913677
% format %lld 123123123123123123123123
123123123123123123123123
% scan 123123123123123123123123 %d
9223372036854775807
% scan 123123123123123123123123 %lld
123123123123123123123123
这与字段宽度控制无关。
% format %40d 123123123123123123123123
-8893568888133913677
% format %40lld 123123123123123123123123
123123123123123123123123