英文:
Java Format string to C#
问题
不理解Java的语法。如何将 "%6d %7.1f %5.1f"
转换为C#的等价写法?
我在C#中始终获得以下打印输出:%6d %7.1f %5.1f
尝试过:
$"{{0:d6}} {{7:1f}} {{5:1f}}"
但是,遇到了异常。
异常信息:
未处理的异常: System.FormatException: 索引(从零开始)必须大于等于零且小于参数列表的大小。
在 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
在 System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
在 System.String.Format(String format, Object arg0, Object arg1, Object arg2)
在 experiment.Main(String[] args)
Java代码:
String.format(""%6d %7.1f %5.1f"", int, double, double/double);
根据变量数据类型,生成的值是显而易见的。
编辑:我刚刚查看了,https://stackoverflow.com/questions/17635617/convert-this-line-of-java-code-to-c-sharp-code
C#
String.Format(""{{0:x2}}"", arrayOfByte[i]);
Java
String.format(""%02x"", arrayOfByte[i]);
请。请。请。不要关闭这个。请求您了。
英文:
Don't understand Java's syntax. How to convert: "%6d %7.1f %5.1f"
to C# equivalent ?
I keep getting this print out in C#: %6d %7.1f %5.1f
Tried:
"{0:d6} {7:1f} {5:1f}"
But, ran into an exception.
Exception:
Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.Format(String format, Object arg0, Object arg1, Object arg2)
at experiment.Main(String[] args)
The Java code:
String.format("%6d %7.1f %5.1f", int, double, double/double);
It's obvious what values will be generated based on variable data types.
EDIT: I just looked at, https://stackoverflow.com/questions/17635617/convert-this-line-of-java-code-to-c-sharp-code
C#
String.Format("{0:x2}", arrayOfByte[i]);
Java
String.format("%02x", arrayOfByte[i]);
PLEASE. PLEASE. PLEASE. DO not close this. Kindly. Please.
答案1
得分: 2
注意:根据对Java格式说明符的(希望如此)更好理解,我完全重写了原来的回答。
根据我的(受限于Google的)理解,%6d
、%7.1f
和%5.1f
对应以下内容:
- 整数,最多6个字符,如果少于6个则填充。
- 浮点数,最多7个字符(包括小数点和小数部分),精度为1。
- 浮点数,最多5个字符(包括小数点和小数部分),精度为1。
你可以使用C#的String.Format来实现,像这样:
var newString = String.Format("{0,6:d} {1,7:f1}, {2,5:f1}", 605, 20.5, 8.22);
这将得到以下字符串:
" 605 20.5 8.22"
花括号({
和}
)内的第一个数字对应于字符串之后传入的参数:
- 0 = 605
- 1 = 20.5
- 2 = 8.22
逗号后的第二个数字表示字符串的长度(包括小数点和小数部分)。
- 6 = 整数的6个字符
- 7 = 浮点数的7个字符
- 5 = 浮点数的5个字符
冒号后的字母和数字是格式说明符。
- d = 整数
- f1 = 浮点数,精度为1。
这将生成如上所示的字符串:
{0,6:d}
将605转换为" 605"(在冒号之前的6导致3个前导空格){1,7:f1}
将20.5转换为" 20.5"(在冒号之前的7导致3个前导空格){2,5:f1}
将8.22转换为" 8.2"(在冒号之前的5导致1个前导空格,精度导致1个小数数字)。
正如我之前所说,查阅String.Format和Standard Numeric Format Strings以获取更多信息。
英文:
NOTE: Completely rewrote my original answer based on a (hopefully) better understanding of the Java format specifiers.
Based on my (Google-limited understanding), %6d
, %7.1f
and %5.1f
correspond to the following:
- An integer with up to 6 characters, padded if less than 6.
- A float with up to 7 characters (including the decimal point and decimal portion) with a precision of 1.
- A float with up to 5 characters (including the decimal point and decimal portion) with a precision of 1.
You can accomplish this with C#'s String.Format, like this:
var newString = String.Format("{0,6:d} {1,7:f1}, {2,5:f1}", 605, 20.5, 8.22);
This will result in the following string:
" 605 20.5 8.22"
The first digit in each placeholder group (defined by {
and }
) corresponds to the argument passed in after the string:
- 0 = 605
- 1 = 20.5
- 2 = 8.22
The second digit, after the ,
refers to the length of the string (including decimal points and decimal portions).
- 6 = 6 characters for the integer
- 7 = 7 characters for the float
- 5 = 5 characters for the float
The letters and numbers after the :
are the format specifiers.
- d = integer
- f1 = floating with a precision of 1.
Which produces the string above, as follows:
- {0,6:d} turns 605 into " 605" (3 leading spaces due to the 6 before the
- {1,7:f1} turns 20.5 into " 20.5" (3 leading spaces due to the 7 before the
- {2,5:f1} turns 8.22 into " 8.2" (1 leading space due to the 5 before the : and 1 decimal number due to the precision).
As I said earlier, check String.Format and Standard Numeric Format Strings for more information.
答案2
得分: 0
从C# 6开始,你可以使用插值。对于你的情况,你可能想尝试以下内容:
string formattedString = $"{0:d6} {7.1:f} {5.1:f}";
在C# 6之前,你可以尝试以下内容:
string formattedString = String.Format("{0:d6} {1:f} {2:f}", 0, 7.1, 5.1);
英文:
Starting from C# 6. you can use interpolation.
For your case you may wanted to try the following:
string formattedString = $"{0:d6} {7.1:f} {5.1:f}";
before C# 6 you can try the following:
string formattedString = String.Format("{0:d6} {1:f} {2:f}", 0, 7.1, 5.1);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论