我有一个要转换为十进制的字符串。输入的字符串没有小数位,例如“123”或2位小数,例如“123.45”或有点笨拙,1位小数“123.3”。我想要显示的数字(属性// components/LoginPopup/saga.js:
import { all, call } from 'redux-saga/effects'
import loginRquest from '../../containers/App/sagas';
export default function* (): Saga<void> {
yield all([
call(loginRquest),
])
}
,类型invoice.Amount
)有2个小数位。下面的代码就是这样。我认为它可以写得更好。怎么样?
decimal
部分地,我不明白,对于字符串格式化“########。00”,#does和0做了什么。例如。如果它是“########。##”会有什么不同?
答案 0 :(得分:2)
#
是必填数字时, 0
是可选数字
例如
decimal d = 12.3M;
// d with exactly 2 digits after decimal point
Console.WriteLine(d.ToString("########.00"));
// d with at most 2 digits after decimal point
Console.WriteLine(d.ToString("########.##"));
结果:
12.30 // exactly 2 digits after decimal point: fractional part padded by 0
12.3 // at most 2 digits after decimal point: one digit - 3 - is enough
答案 1 :(得分:1)
基本上,#表示可选,其中0是必需的。 至于更好的解释,如果你输入#然后如果数字可用于fullfil占位符,它将被添加,否则它将被忽略。
然而,将0设置为不同,因为它总会为您设置一个值。
你可以把两者结合起来。
String.Format("{0:0.##}", 222.222222);
// 222.22
String.Format("{0:0.##}", 222.2);
// 222.2
String.Format("{0:0.0#}", 222.2)
// 222.2
答案 2 :(得分:1)
“#”是可选的,而“0”将显示数字或0。
例如,
var x = 5.67;
x.ToString("##.###"); // 5.67
x.ToString("00.000"); // 05.670
x.ToString("##.##0"); // 5.670
如果你只关心你有多少小数位,我建议使用
x.ToString("f2"); // 5.67
获得2个小数点。
可以在http://www.independent-software.com/net-string-formatting-in-csharp-cheat-sheet.html/找到更多信息。
答案 3 :(得分:1)
您不需要将decimal
转换为string
来进行2位小数的格式化。您可以直接使用decimal.Round
方法。你可以阅读它here。
因此您的代码可以转换为
decimal newDecimal;
Decimal.TryParse(s, out newDecimal);
newDecimal = decimal.Round(newDecimal, 2, MidpointRounding.AwayFromZero);
上面的代码也简化为C#7.0声明表达式
Decimal.TryParse(s, out decimal newDecimal);
newDecimal = decimal.Round(newDecimal, 2, MidpointRounding.AwayFromZero);
现在newDecimal将具有2个精度的值。
您可以查看this实况小提琴。