Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 任何类型的1.0数字中的逗号_Julia - Fatal编程技术网

Julia 任何类型的1.0数字中的逗号

Julia 任何类型的1.0数字中的逗号,julia,Julia,我想要一个Julia代码中的函数,num2str,它可以在小数点左侧的适当位置为任何类型的有效Julia数字(包括BigInt和BigFloat)添加逗号或指定的分隔符。它将返回一个字符串进行打印 例如: flt1 = 122234.141567 println("flt1 num2str($flt1) = ", num2str(flt1)) # Expected output is: flt1 num2str(122234.141567) = 122,234.141567 我想将此函数与pr

我想要一个Julia代码中的函数,
num2str
,它可以在小数点左侧的适当位置为任何类型的有效Julia数字(包括BigInt和BigFloat)添加逗号或指定的分隔符。它将返回一个字符串进行打印

例如:

flt1 = 122234.141567
println("flt1 num2str($flt1) = ", num2str(flt1))
# Expected output is:
flt1 num2str(122234.141567) = 122,234.141567

我想将此函数与
print
println
内置函数一起使用。

此问题得到了部分回答,即整数。下面的函数应该满足浮点数和“大”数的需要

“”“
对于任何有效数字,请添加适当的分隔符。
参见Goyvaerts和Levithan的“正则表达式食谱”,O'Reilly,第二版,
p、 402,用于在返回字符串的整数中插入逗号的正则表达式。
"""
函数num2str(num::Number;delim=“,”)
小数点=”
str=字符串(num)
strs=拆分(str,小数点)
左_str=strs[1]
右=长度(strs)>1?strs[2]:“”

left_str=replace(left_str,r)(?我怀疑它不会被添加到
print
变体中。Julia有意将重点放在尽可能精简
Base
上,这意味着许多类似的功能都在包中(其中许多是由核心开发人员编写的)。在这种情况下,我相当肯定您所追求的功能提供了C和Python风格的数字格式。干杯。如果您是对的,我不会感到惊讶。但是,我非常喜欢Python3.6+的一点是,所有这些格式内容都在核心打印函数中,使用带f字符串的字符串插值.我希望这是在基础朱莉娅,但我真的很喜欢朱莉娅。在这个问题上我是中立的:-)然而,我确实记得,社区中围绕这一主题进行了不少讨论,但总体而言,最重要的是,尤其是核心开发人员,他们支持尽可能保持
Base
苗条。不过,肯定有两种观点。
"""
 For any valid number, add appropriate delimiters.
 See "Regular Expressions Cookbook," by Goyvaerts and Levithan, O'Reilly, 2nd Ed, 
 p. 402, for Regex that inserts commas into integers returning a string.
"""
function num2str(num::Number; delim=",")
   decimal_point = "."
   str = string(num)
   strs = split(str, decimal_point)
   left_str = strs[1]
   right_str = length(strs) > 1 ? strs[2] : ""
   left_str = replace(left_str, r"(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))" => delim)
   decimal_point = occursin(decimal_point, str) ? decimal_point : ""
   return left_str * decimal_point * right_str
end

# Test integers, BigInts, floats, and BigFloats:
int0 = 0
int1 = 123
int2 = 123456789
big1 = big"123"
big2 = big"123456789123456789"
flt1 = 122234.141567
flt2 = 7.12345e9
big3 = big"260123.0"
big4 = big"7.12345e9"

setprecision(20)
println("int0 num2str($int0) \t\t\t\t = ", num2str(int0))
println("int1 num2str($int1) \t\t\t\t = ", num2str(int1))
println("int2 num2str($int2) \t\t\t = ", num2str(int2))
println("big1 num2str($big1) \t\t\t\t = ", num2str(big1))
println("big2 num2str($big2) \t\t = ", num2str(big2))
println("big2 num2str($big2) delim is _ \t = ", num2str(big2, delim="_"))
println("flt1 num2str($flt1) \t\t\t = ", num2str(flt1))
println("flt1 num2str($flt1) delim is _ \t\t = ", num2str(flt1, delim="_"))
println("flt2 num2str($flt2) \t\t\t = ", num2str(flt2))
println("big3 num2str($big3) \t\t\t = ", num2str(big3))
println("big4 num2str($big4) \t\t\t = ", num2str(big4))
println("big4 num2str($big4) delim is _ \t\t = ", num2str(big4, delim="_"))

## ============================== Output ===================================
int0 num2str(0)                                  = 0
int1 num2str(123)                                = 123
int2 num2str(123456789)                          = 123,456,789
big1 num2str(123)                                = 123
big2 num2str(123456789123456789)                 = 123,456,789,123,456,789
big2 num2str(123456789123456789) delim is _      = 123_456_789_123_456_789
flt1 num2str(122234.141567)                      = 122,234.141567
flt1 num2str(122234.141567) delim is _           = 122_234.141567
flt2 num2str(7.12345e9)                          = 7.12345e9
big3 num2str(2.60123e+05)                        = 2.60123e+05
big4 num2str(7.12345e+09)                        = 7.12345e+09
big4 num2str(7.12345e+09) delim is _             = 7.12345e+09